例子来源:《设计模式之禅》——第18章 策略模式
Context封装角色;Strategy抽象策略角色;ConcreteStrateg具体策略角色。
Strategy
public interface Strategy {
void doSomething();
}
ConcreteStrategyA
public class ConcreteStrategyA implements Strategy {
@Override
public void doSomething() {
System.out.println("具体策略A的运算法则");
}
}
ConcreteStrategyB
public class ConcrteteStrategyB implements Strategy {
@Override
public void doSomething() {
System.out.println("具体策略2的运算法则");
}
}
Context
public class Context {
private Strategy strategy = null;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void doAnything(){
this.strategy.doSomething();
}
}
Client
public class Client {
public static void main(String[] args) {
int a = Integer.parseInt(args[0]);
String symbol = args[1];
int b = Integer.parseInt(args[2]);
System.out.println("输入的参数为:" + Arrays.toString(args));
System.out.println("运行结果为:" + a + symbol + b + "=" + Calculator.ADD.exec(a, b));
}
}
策略模式的优点
- 算法可以自由切换
- 避免使用多重条件判断
- 扩展型良好
策略模式的缺点
- 策略类数量增多
- 所有的策略类都需要对外暴露