策略模式简介
策略模式(Strategy Pattern)定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。这种模式使得算法可独立于使用它的客户而变化。策略模式在设计模式中属于行为型。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
为什么使用策略模式
- 算法自由切换:这些算法封装成一个一个的类,可以任意地替换;
-
避免多重条件判断:减少
if、else
的使用; - 扩展性良好:只需要单独处理新的策略算法,不会对原有策略由影响;
组件
- 环境类(Context): 环境类是依赖于策略接口的类,环境类会引用策略类来实现具体的方法;
- 抽象策略类(Strategy):定义所有支持的算法的公共接口
- 具体策略类(ConcreteStrategy):实现具体算法
使用情景
- 当一个类定义了多种行为,并且这些行为会使这个类出现过多的条件语句如
if、else
时; - 程序不希望暴露复杂的算法相关的逻辑,那么可以使用策略模式来封装算法;
- 类似算法但又不尽相同的,多种之前有差异的;
总结
策略模式中Context
与Strategy
是松耦合的关系,在Context
中只需要使用某一个实现Strategy
接口类的实例,并不关心具体是哪一个ConcreteStrategy
。当需要新增ConcreteStrategy
时,Context
不需要修改代码,就可引用到新增ConcreteStrategy
的实例。
与工厂模式区别
- 相似点
- 结构上两种很相似。
- 差异
- 关注点
- 工厂模式 关注对象创建;
- 策略模式 关注行为的封装;
- 用途
- 工厂模式 是创建型模式,它的作用是创建对象;
- 策略模式 是行为型模式,它的作用是让一个对象在许多行为中是可变的;
结尾:欢迎关注我的简书!您的鼓励是我最大动力!