策略模式
一般来说,使用设计模式时,首先考虑“什么会导致重新设计”?然后要避免那些导致重新设计的因素。
设计模式的主要原则之一是封装变化的内容。大部分情况下,对于不同类别的请求,需要有不同的算法来实现。这时候策略模式就派上用场了。
UML类图
关于策略和状态设计模式
类图上来看,策略模式和状态模式的参与者非常相似,场景的参与者都与一个接口有聚合关系。状态模式中的接口是State,策略模式中的接口是Strategy。区别是:
模式 | 变化的因素 | 上下文 |
---|---|---|
状态 | 状态 | 维护子类当前状态的一个实例 |
策略 | 算法 | 配置为具体策略对象,封装的算法 |
请注意:
1.尽量不要加条件语句,策略模式不需要使用条件语句来选择所需的行为。不同的任务由不同的具体策略来吹,因为客户通过上下文请求具体策略,它必须知道有哪些可用的策略。这不是说客户选择过程中不能使用条件语句,而是说条件语句不是上下文的一部分。
2.算法族 任何依赖于一组特定行为的项目都可以转换为一种策略模式,将那些行为封装策略。
适用场景
需要多个不同算法处理的时候,并且客户端预先知道具体策略类型的情况下,可以使用策略模式。
代码示例
代码地址:https://github.com/lemon2015/design-mode/tree/master/Strategy