策略模式(Strategy):他定义了算法家族,分别封装起来,让他们之间可以互相替换。
类图:
代码:
publicabstractclass Strategy {
publicabstractvoid method();
}
publicclass ConcreteStrategyA extends Strategy {
@Override
publicvoid method() {
System.out.println("A");
}
}
publicclass ConcreteStrategyB extends Strategy {
@Override
publicvoid method() {
System.out.println("B");
}
}
publicclass Context {
private Strategy strategy;
public Context(Strategy strategy){
this.strategy=strategy;
}
publicvoid operation(){
System.out.print("操作开始:");
this.strategy.method();
}
}
publicstaticvoid main(String[] args) {
Context context=new Context(new ConcreteStrategyA());
context.operation();
context=new Context(new ConcreteStrategyB());
context.operation();
}
模板方法和策略模式基本上是一样的。不同的只是模板的算法结构在抽象类中,策略的算法结构在Context中。