文档地址:《设计模式之禅》
定义: Define a family of algorithms,encapsulate each one,and make them interchangeable.(定义一组算法, 将每个算法都封装起来, 并且使它们之间可以互换。 )
通用类图:
● Context封装角色
它也叫做上下文角色, 起承上启下封装作用, 屏蔽高层模块对策略、 算法的直接访问,装可能存在的变化。
● Strategy抽象策略角色
策略、 算法家族的抽象, 通常为接口, 定义每个策略或算法必须具有的方法和属性。
● ConcreteStrategy具体策略角色
实现抽象策略中的操作, 该类含有具体的算法。
优点:
● 算法可以自由切换
● 避免使用多重条件判断
● 扩展性良好
缺点:
● 策略类数量增多
● 所有的策略类都需要对外暴露
使用场景:
● 多个类只有在算法或行为上稍有不同的场景。
● 算法需要自由切换的场景。
● 需要屏蔽算法规则的场景。