Patterns / Behavioral patterns
image

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

//ConcreteStrategy
class AddStrategy implements Strategy {
    public int doOperation(int a, int b) {
        return a + b;
    }
}

//ConcreteStrategy
class SubstractStrategy implements Strategy {
    public int doOperation(int a, int b) {
        return a - b;
    }
}

//Context
class Calc {
    Strategy strategy;

    public int execute(int a, int b) {
        if (strategy == null
        return 0;
        return strategy.doOperation(a, b);
    }

    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }
}

var calc = new Calc();
var result1 = calc.execute(53);
//result1 is 0

calc.setStrategy(new AddStrategy());
var result2 = calc.execute(53);
//result2 is 8

calc.setStrategy(new SubstractStrategy());
var result3 = calc.execute(53);
//result3 is 2

System.out.println("result1 is " + result1);
System.out.println("result2 is " + result2);
System.out.println("result3 is " + result3);


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