意图 {#意图}
定义一系列算法, 把它们一个个封装起来,并且使它们可以相互替换。本模式使得算法可独立于使用它的客户而变化。
------《设计模式:可复用面向对象软件的基础》中文版第234页
由于在JS中,函数是一等公民,所以我们这里直接把函数当作这一个个策略对象即可。
示例 {#示例}
我们的编码目的是,根据一个人的等级把他的薪水乘不同的系数:
- 如果是A级,就乘4。
- 如果是B级,就乘3。
- 如果是C级,就乘2。
不要用if else
或者switch case
,直接运用我们的策略模式,代码如下:
|------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| const strategies = { levelA(salary) { return salary * 4 }, levelB(salary) { return salary * 3 }, levelC(salary) { return salary * 2 } } function calcSalary(level, salary) { return strategies[level](salary) } console.log(calcSalary('levelA', 25000)) // 100000 console.log(calcSalary('levelB', 15000)) // 45000 console.log(calcSalary('levelC', 10000)) // 20000
|
以上。