对象的行为模式!又称之为政策模式!
用意
针对一组算法,将每一个算法封装到共同接口的独立类中,从而使得它们可以相互替换,而不会影响到客户端。(类似 抽象接口——具体实现)
示例
具备的角色
Context(环境)
IStrategy(抽象策略)
StrategyImpl(具体策略)
策略模式将行为与环境分割开,策略的增减都不会影响到环境和客户端。
环境
持有策略的引用,负责维持和查询行为。(环境对象 即上下文对象 避免客户端直接操作策略,封装了一些存在的变化 便于一些公共功能的实现、状态的存储,旨在简便客户端)
行为
即策略。即封装的各种算法。
例如:人乘坐火车到达北京。
乘坐交通工具为抽象策略。
乘坐火车为具体策略。
人为环境。环境的存在更能体现面向对象编程。
适用场景
- 适用策略模式可以动态地让一个对象在许多行为中选择一种行为;
- 一个系统需要动态地在几种算法中选择一种。
- 一个系统的算法使用的数据不可以让客户端知道。
- 使用策略模式,将行为转移到具体的相应的具体策略类里,可以避免使用难以维护的多重条件选择语句,提现面向对象的设计。
与建造模式的关系
建造模式可以看做策略模式的一个特殊情况。