定义
策略模式的定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以相互转换。
策略模式角色
1:环境角色(Context)
该角色也叫上下文角色,起到承上启下的作用,屏蔽高层模块对策略、算法的直接访问,它持有一个Strategy类的引用。
public class Context{
private Strategy strategy = null;
//构造函数
public Context(Strategy strategy){
this.strategy = strategy;
}
//调用策略方法
public void contextInterface(){
this.strategy.strategyInterface();
}
}
2:抽象策略角色(Strategy)
该角色对策略、算法进行抽象,通常定义每个策略或算法必须具有的方法和属性。
public abstract class Strategy{
public abstract void strategyInterface();
}
3:具体策略(Concrete Strategy)
该角色实现抽象策略中的具体操作,含有具体的算法。
public class ConcreteStrategy extends Strategy{
@Override
public void strategyInterface(){
System.out.println("Strategy.strategyInterface() was called")
}
}
优点
1:策略模式提供了管理相关算法族的办法。
2:策略模式提供了可以替换继承关系的办法。
3:使用策略模式可以避免使用多重条件转移。
缺点
1:客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
2:策略模式造成有很多个策略类。
应用场景
1:多个类只是在算法或者行为上略有不同的场景。
2:算法需要自由切换的场景。
3:需要屏蔽算法规则的场景。
参考文献:设计模式(java)
网友评论