策略模式

定义一系列算法,把他们一个个封装起来,并且使它们互相可替换

1. 创建

1.1 利用对象封装实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 将算法的实现与算法的使用分离,strategies是一个策略类
let strategies = {
"boss": function (salary) {
return salary * 4;
},
"rookie": function (salary) {
return salary * 3;
},
"liang": function (salary) {
return salary * 2;
}
}

// 需要调用计算类,只需要提供名字,解决了if else的问题
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)); // 30000

2. 优点

  • 有效避免多重条件选择语句
  • 契合了开放封闭原则,易于扩展
  • 策略类封装的算法可复用

参考

《javascript设计模式与开发实践》

作者

Liang

发布于

2021-01-30

更新于

2021-12-25

许可协议


评论