UNL类图
-
Context向外暴露使用策略的接口,设置使用哪一个策略。
-
Strategy策略基类,所有的策略类都继承自该类
-
ConcreteStrategyA、ConcreteStrategyB具体的策略类,用来实现具体的解决方案。
适用场合
适合于一个问题有多种解决方案。比如排序时可以选择快排,堆排,冒泡,选择,插入等。主要解决if...else带来的复杂和难以维护。
关键代码实现同一个接口
注意事项
如果一个系统策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。
应用实例:
-
诸葛亮的锦囊妙计,每一个锦囊就是一个策略
-
出行方式,自行车,汽车,步行,每一种出行方式都是一个策略。
-
常见的鸭子策略模式:每一个具体的鸭子是一种策略,每种鸭子都有不同的表现形式(飞行高度,叫声大小等等)。
优缺点:
优点
-
策略可以自由切换,
-
避免使用多重条件判断(if...else)
-
扩展性好
缺点
-
策略类会很多
-
所有策略类都需要对外暴露