设计模式之策略模式
策略模式也是行为模式的一种。
意图:定义一系列的算法,把它们一个一个封装起来,并使它们可以相互替换。本模式使得算法可以独立于使用它的客户而变化。
场景:使用GOF中的场景来说明,许多算法可以对一个正文流换行,将这些算法硬编码到使用它的类中是不可取的,原因如下:
1. 需要换行的客户程序如果直接包含换行代码的时候会很复杂,并使得客户程序复杂到难以维护,尤其是需要支持多种算法时情况会急剧恶化。
2. 不同的时候需要不同的换行算法,我们不想支持我们不使用的算法。
3. 当换行功能是客户程序一个难以分割的成分时,增加新的换行算法或改变已有的将会十分苦难。
现在的解决方案就是定义一些类来封装这些算法,从而避免这个问题,一个封装算法成为一个策略。
![](https://images0.cnblogs.com/blog2015/531894/201505/151627189856152.jpg)
适用性:
1. 许多相关类仅仅是行为有异
2. 需要使用一个算法的不同变体
3. 算法使用客户不应该知道的数据,如此可以避免暴漏数据
4. 可以用来替代IF语句
与状态模式的区别:
状态模式与策略模式可以说是非常的类似,但其使用场景是不同的,状态模式针对的是存在状态转换的情况,而且对象的行为依赖于状态,并可以在其中加入状态管理的特性。
策略模式偏重于算法实现,它关系的是算法配置。
实际使用:
在现有项目中没有找到策略模式的准确实现,但是找到了类似的使用场景:系统A需要从系统B上获取数据,可能会通过不同的接口,如Web接口,文件接口,API等,每种实现可以看做是策略的具体实现类,并在调用方根据需求调用,这种调用可以是硬编码,也可以根据相关逻辑使用反射来实现配置。