Strategy Design Pattern

In Strategy Pattern, a class behaviour or its algorithm can be changed at run time. 

This type of design pattern comes under behaviour pattern. 

In strategy pattern, we create objects which represent various strategies and a context object whose behaviour varies as per its strategy object. 

The strategy object changes the executing algorithm of the context object. 

 

Below diagram shows the basic logic and flow of Strategy Pattern, and I will give a code example based on this Pattern.  

 

 

 

Step1 Create Strategy Interface. 

public interface Strategy {
   public int doOperation(int num1, int num2);
}

 

Step2. Create concrete classes implementing the Strategy interface. 

OperationAdd:

public class OperationAdd implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 + num2;
   }
}

OperationSubstract:

public class OperationSubstract implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 - num2;
   }
}

OperationMultiply:

public class OperationMultiply implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 * num2;
   }
}

 

Step3. Create Context Class that could determine what strategy to use at Run-time

public class Context {
   private Strategy strategy;

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

   public int executeStrategy(int num1, int num2){
      return strategy.doOperation(num1, num2);
   }
}

 

Step 4.

Create main class for Demo

public class StrategyPatternDemo {
   public static void main(String[] args) {
      Context context = new Context(new OperationAdd());        
      System.out.println("10 + 5 = " + context.executeStrategy(10, 5));

      context = new Context(new OperationSubstract());        
      System.out.println("10 - 5 = " + context.executeStrategy(10, 5));

      context = new Context(new OperationMultiply());        
      System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
   }
}

 

Guess you like

Origin www.cnblogs.com/codingyangmao/p/11224664.html