一、模式定义
定义一个算法家族,包含一组可替换的算法。策略模式使得算法和算法的使用者之间的解耦;并使得使用者可以动态的使用算法家族中的任何一个算法。
二、体现的设计原则
策略模式体现出了一下3个设计原则:
1. 独立出应用中需要变化的部分,和不经常变换的部分想分离。比如算法就属于经常变化的部分,将其独立出来,修改或者扩展时,不会影响到使用者。
2. 针对接口编程,而不是针对实现编程。定义算法家族时,必然会定义一个抽象基类,提供算法能提供的全部接口。以便用多态实现动态算法。
3. 组合优于继承。组合的关系使得代码更加灵活,比如策略的使用者和策略之间是has-a的关系。
三、UML图示
四、应用场景
1. 系统需要在几种算法之间快速切换。
2. 重构代码时,替换多重条件选择语句。
五、注意事项
1. 每种策略只实现一种算法。