1. 定义
策略模式,定义了算法(规则)家族,分别封装起来,让它们之间可以相互替换。
此模式让算法(规则)的变化,不会影响到使用算法的客户。
2. 解读
类比:
- 网上购物时,我们会发现商家有着各种各样的促销策略,例如满300减100, 第二件8折,买3件7折等等。其实,这与面向对象的程序世界中的策略模式是一个很好的对应,每一种促销算法,其实都可以抽象成一种策略。
优点:
- 开放封闭原则的典型应用(面向接口编程,而非面向实现编程)
- 抽象需求中功能的部分为接口,也即封装变化 (向修改封闭)
- 在具体的算法类中实现接口(向扩展开放)
- 是最常用的一种设计模式,经常与简单工厂模式结合使用
弊端:
- 客户端需要了解不同算法间的区别
- 复杂场景中,可能出现额外的通信开销。接口定义的参数会是一个全集(覆盖所有场景),具体的实现类中,可能并非所有的参数、方法都会用到。
3. 举例
具体的实现代码,可以参照简单工厂模式文中的代码。
下面我给出一个UML图来展示抽象与实现之间的关系。
本博客专注于技术分享,干货满满,持续更新。
欢迎关注❤️、点赞👍、转发📣!