设计模式之: 策略
大白话:定义一系列方法,函数,算法等,统称为解决方案,然后把他们封装起来,使得在不同场景下可以相互替换
详细介绍
- 本质:定义一系列算法方法,把他们封装,并且使他们可以互相替换
- 解决痛点:在很多算法或者功能相似,但需要大量if…else或者switch来判断,所已有效解决复杂和难以维护痛点
- 怎么使用:在这些算法封装成一个个类或函数,任意切换他们
- 生活举例:
- 诸葛亮的锦郎妙计,每个锦囊就是一个策略
- 地图导航,算法算出来的每一条路线就是一个策略
- 出行旅游,汽车,高铁,飞机,每一钟交通工具就是一个策略
优点
- 算法或者函数,策略可以自由切换灵活
- 避免使用多重条件判断,增加代码量和复杂度
- 便于后期拓展
缺点
- 策略类只能适合少量,数量多了导致臃肿膨胀(大于4个以上,建议使用混合模式解决)
- 所有策略都需要对外暴露
项目举例
- 当某个系统有许多类或函数,他们区别仅仅在意行为。那么使用策略模式,可以让一个对象在特定行为选择特定的函数;
- 一个系统需要动态的在几种算法中选择其中一个;
- 如果对象有很多行为,需要使用多重条件判断语句来实现;
实现代码
class StrategyPattern {
constructor (method) {
this.method = method
}
// 执行方法
run(a, b) {
return this.method(a,b)
}
}
// 【策略1】
const = methodAdd = ((num1, num2) => num1 + num2)
// 【策略2】
const = methodSubtract = ((num1, num2) => num1 - num2)
// 【策略3】
const = methodMultiply = ((num1, num2) => num1 * num2)
// [策略xxx] ...
new StrategyPattern(methodAdd).run(10, 5) // 15
new StrategyPattern(methodSubtract).run(10, 5) // 5
new StrategyPattern(methodMultiply).run(10, 5) // 50