什么是策略模式
策略模式中的一个关键角色是策略类,它为所有支持的或相关的算法声明了一个共同接口。PS:还有使用策略接口来实现相关算法的具体策略类。场景(context)类的对象配置有一个具体策略对象的实例,场景对象使用策略接口调用由具体策略类定义的算法。静态关系图如下: 策略模式静态关系图策略模式的设计原则
策略模式的设计原则是把一个类中经常改变或者是将来可能改变的部分提取出来,作为一个接口,然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类。
何时使用策略模式
- 一个类再起操作中使用多个条件语句来定义许多行为。我们可以把相关的条件分支移到他们自己的策略类中。
- 需要算法的各种变体
- 需要避免吧复杂的、预算法相关的数据结构暴露给客户端
策略模式中的三个对象
- 环境对象:该类中实现了对抽象策略中定义的接口或者抽象类的引用。
- 抽象策略类:它可以有接口或抽象类来实现。
- 具体策略对象:他封装了实现不同功能的算法。
策略模式的优缺点
优点
- 算法可以自由切换,通过实现抽象策略,通过角色对其封装,保证对外提供“可自由切换”的策略
- 避免使用多重条件判断,如果有多重策略,那么每个策略只需要实现自己的方法
- 扩展性好,可以在现有的系统中任意的加入新的策略 (需要符合 OCP 原则)
缺点
- 策略类数量增多,每个策略都是一个类,复用的可能性很小,类的数量会增多
- 所有的策略都要对外暴露,上层模块必须知道有哪些策略才能知道采用哪种对应的策略,(可以通过工厂模式、代理模式、享元模式修正)
使用策略模式时的注意事项
如果一个系统的策略多余四个,就需要考虑使用混合模式,解决策略类膨胀的问题。
参考文献:Objective-C编程之道 iOS设计模式
特别鸣谢:Runoob
网友评论