Strategy

GOF Intent:
Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.

Strategy pattern همچنين با عنوان Policy Pattern شناخته مي شود.

چه وقت از Strategy استفاده کنيم؟ وقتي که…

  • وقتي تعدادي کلاس مرتبط با هم تنها رفتارهاي شان متفاوت است.
  • وقتي براي يک کار الگوريتم هاي متفاوتي وجود دارد.
  • براي دوري جستن از if هاي متوالي که رفتارهاي متفاوت يک کلاس را پياده سازي مي کنند.

نکته:
نکته قابل توجه در اين Pattern اين است که ما به جاي انجام Subclassing روي context الگوريتم (Strategy) مربوطه را از context جدا مي کنيم و آن را که يک interface است به صورتهايي که لازم است implement مي کنيم.


فايده هاي Strategy Pattern

  • الگوريتم هاي گوناگون هم خانواده را دسته بندي مي کند.
  • اين امکان را به context مي دهد که از الگوريتم هاي مختلفي استفاده نمايد.
  • تعداد if ها را کاهش مي دهد و باعث خوانايي برنامه مي شود.

نمونه کد:

interface Strategy {
   int execute(int a, int b);
}


class ConcreteStrategyAdd implements Strategy {
   public int execute(int a, int b) {
      System.out.println(“Called ConcreteStrategyAdd’s execute()”);
      return a + b; // Do an addition with a and b
   }
}

class ConcreteStrategySubtract implements Strategy {
   public int execute(int a, int b) {
      System.out.println(“Called ConcreteStrategySubtract’s execute()”);
      return a – b; // Do a subtraction with a and b
   }
}


class Context {
   private Strategy strategy;

   public Context(Strategy strategy) {
      this.strategy = strategy;
   }

   public int executeStrategy(int a, int b) {
      return strategy.execute(a, b);
   }
}


public static void main(String[] args) {
   Context context;
   context = new Context(new ConcreteStrategyAdd());
   int resultA = context.executeStrategy(3,4);
   context = new Context(new ConcreteStrategySubtract());
   int resultB = context.executeStrategy(3,4);
}

چند نمونه کاربرد:
نمونه 1

نمونه 2



منبع ها:

  1. Design Patterns – Elements of Reusable Object Oriented Software (GOF) By Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
  2. Strategy Pattern in Wikipedia
  3. Strategy Pattern in Devlake

پست شده در دسته‌بندی نشده

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*


3 − = یک

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

تماس با من: admin@paspars.com