定义:
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
本质:
分离算法,选择实现。
优点:
- 定义一系列算法
- 避免多重条件语句
- 更好的扩展性
缺点:
- 客户必须了解每种策略的不同
- 增加了对象数目
- 只适合扁平的算法结构
- 即在一个策略接口下,有多个平等的策略算法,就相当于兄弟算法。而且在运行时刻只有一个算法那被使用,这就限制了算法使用的层级,使用的时候不能嵌套使用。
建议在以下情况中选用策略模式:
- 出现有许多相关的类,仅仅是行为有差别的情况下,可以使用策略模式来使用多个行为中的一个来配置一个类的方法,实现算法动态切换。
- 出现同一个算法,有很多不同实现的情况下,可以使用策略模式来把这些 **“不同的实现” **实现成为一个算法的类层次。
- 需要封装算法中,有与算法相关数据的情况下,可以使用策略模式来避免暴露这些跟算法相关的数据结构。
- 出现抽象一个定义了很多行为的类,并且是通过多个if-else语句来选择这些行为的情况下,可以使用策略模式来代替这些条件语句。