一、定义
明天咱们探讨的设计模式是「策略模式」,策略模式比拟好了解,首先咱们看一下他的定义:
策略模式是一种定义一系列算法的办法,从概念上来看,所有这些算法实现的都是雷同的工作,只是实现不同,他能够以雷同的形式调用所有的算法,缩小了各种算法类与应用算法类之间的耦合「DEP」。
由下面的定义咱们能够看到,策略模式有3个因素:
- 策略模板:策略模式的算法都是为了实现雷同的工作的,只是可能触发条件不同,所以咱们就能够形象进去一个策略模板,相似于「工厂模式中的产品模板」;
- 策略:依据具体场景实现不同的策略,以依据理论场景失去具体的后果;
- 上下文:上下文依据场景不同来决定应用哪种策略。
二、举例说明
策略模式在生活中也比拟常见,上面举例说明:
当咱们在生活中乘坐公交地铁的时候,合肥市的票价是2元、学生半价、老年人免票,这就是一种常见的设计模式,咱们能够看出:
- 都是为了解决人们乘车计价的问题
- 不同年龄段的人计算价格办法不同
那咱们就有实现计划:
//策略模板class StrategyTemplate { constructor() {}}// 老年人免票class OldPersonStrategy extends StrategyTemplate { constructor() {} calculatePrice() { return 0; }}// 学生半价class StudentStrategy extends StrategyTemplate { constructor() {} calculatePrice() { return 1; }}// 普票2元class NormalStrategy extends StrategyTemplate { constructor() {} calculatePrice() { return 2; }}// 上下文传入策略并应用class BusContext { constructor(strategy) { this.strategy = strategy; } pay() { return this.strategy.calculatePrice(); }}// 应用const oldPerson = new BusContext(new OldPersonStrategy());oldPerson.pay();const student = new BusContext(new StudentStrategy());student.pay();const person = new BusContext(new NormalStrategy());person.pay();
生存中咱们随处可见也有很多策略模式的应用,比方洗衣机(快洗、漂洗、大件等)、电饭煲(煮饭、煮粥等)、电动牙刷(高频、中频、低频)、购物(满减、打折、返利等)。
总结
由下面这么多的例子咱们能够总结进去,策略模式的应用场景有几个特点:
- 面对一个问题/需要有多种解决策略,须要判断不同的场景
- 场景的数量较少
长处就是:
- 策略与策略之间互相独立,扩展性、维护性比拟好
- 单元测试好做
- 缩小了
switch/if else
判断
毛病就是:
- 不适宜解决场景太多的状况
参考
大话设计模式 - 程杰
五分钟学设计模式.10.策略模式
集体博客
北落师门的博客