定义一系列算法,把他们一个个封装起来,并且使它们互相可替换
1. 创建
1.1 利用对象封装实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| let strategies = { "boss": function (salary) { return salary * 4; }, "rookie": function (salary) { return salary * 3; }, "liang": function (salary) { return salary * 2; } }
let calculateBonus = function (level, salary) { return strategies[level](salary); }
|
1.2 利用传递函数实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| function boss(salary) { return salary * 4; } function rookie(salary) { return salary * 3; } function liang (salary) { return salary * 2; }
let calculateBonus2 = function (func, salary) { return func(salary); }
console.log(calculateBonus2(rookie, 10000));
|
2. 优点
- 有效避免多重条件选择语句
- 契合了开放封闭原则,易于扩展
- 策略类封装的算法可复用
参考
《javascript设计模式与开发实践》