内容抄自《设计模式》清华大学出版社,2011
模式动机: 在很多情况下,实现某个目标的途径不止一条,例如人们外出旅游时可以选择多种不同的出行方式。
模式定义: 定义一系列的算法,将每一个算法封装起来,并让它们可以相互替换。
结构分析:
包含角色:
1.Context(环境类)
2.Strategy(抽象策略类)
3.ConcreteStrategy(具体策略类)
模式分析: 利用聚合解决条件分支
public abstract class Strategy{
public abstract void strategy();
}
public class ConcreteStrategy extends Strategy{
@Override
public void strategy(){}
}
public class Context{
private Strategy strategy;
//利用聚合解决条件分支
public Context(Strategy strategy){
this.strategy = strategy;
}
public void do(){
this.strategy.strategy():
}
}
优点:
1.支持开闭原则,用户可以在不修改原有系统的基础上选择算法或行为,或增加行为。
2.避免条件分支语句
缺点:
1.客户端需要知道所有的策略类,并自行决定使用哪一个。
2.策略模式将造成产生很大的策略类和对象。
适用环境:
1.行为抽象化
2.动态选择算法