策略模式:将一个个操作或算法封装起来,需要时他们可以相互替换。
优点:算法可以自由切换,扩展性良好。
缺点:每一个策略类都需要对外开放,而且策略类会不断增加。
切记:一般不要将策略类的数量多于四个。
参考案例:
public interface Strategy {
public int doOperation(int num1,int num2);
}
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;
}
}
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);
}
}
public class StrategyPattern {
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));
}
}
最终的运行结果:
10 + 5 = 15
10 - 5 = 5
10 * 5 = 50