51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

JS设计模式之策略模式

意图 {#意图}

定义一系列算法, 把它们一个个封装起来,并且使它们可以相互替换。本模式使得算法可独立于使用它的客户而变化。

------《设计模式:可复用面向对象软件的基础》中文版第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 |

以上。

参考 {#参考}

设计模式:可复用面向对象软件的基础

JS设计模式------策略模式

赞(1)
未经允许不得转载:工具盒子 » JS设计模式之策略模式