定义
策略模式的定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以相互转换。
策略模式角色
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)
文章转载于:https://www.jianshu.com/p/e1d17abec158
原著是一个有趣的人,若有侵权,请通知删除
还没有人抢沙发呢~