Strategy Design Pattern

Overview

When to use Strategy Pattern?

Implementation

Creating an Interface Strategy.java

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

Creating concrete classes implementing the same interface OperationAdd.java, OperationSubstract.java, OperationMultiply.java

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

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

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

Creating Context class Context.java

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);
}
}

Using the context to see change in behaviour when it changes its strategy StrategyPatternDemo.java

public class StrategyPatternDemo{
public static void main(String[] args){
Context context = new Context(new OperationAdd()); // context has instantiated with Context with constructor passing OperationAdd class object  
System.out.println("Addition:" + context.executeStrategy(9, 6)); // context.executeStrategy executes and calls strategy.doOperation which performs addition.

Context context = new Context(new OperationSubstract());
System.out.println("Substraction:" + context.executeStrategy(9, 6));

Context context = new Context(new OperationMultiply());
System.out.println("Multiplication:" + context.executeStrategy(9, 6));
}
}

Advantages of Strategic design pattern

Reference

Link