概念:

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

优点:

  策略模式利用组合,委托等技术和思想,有效的避免很多if条件语句。
  策略模式提供了开放-封闭原则,使代码更容易理解和扩展。
  策略模式中的代码可以复用。

代码缺点如下:

  annualBonus函数包含了很多if-else语句。
  annualBonus函数缺乏弹性,假如还有D等级的话,那么我们需要在annualBonus函数内添加判断等级D的if语句;
  算法复用性差,如果在其他的地方也有类似这样的算法的话,但是规则不一样,我们这些代码不能通用。

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
27
28
29
30
31
32
33
function annualBonus(salary,level) {
if(level === 'A') {
return salary * 4;
}
if(level === 'B') {
return salary * 3;
}
if(level === 'C') {
return salary * 2;
}
};
// 调用如下:
console.log(annualBonus(4000,'A')); // 16000
console.log(annualBonus(3000,'B')); // 9000



// 策略模式下:
var obj = {
"A": function(salary) {
return salary * 4;
},
"B" : function(salary) {
return salary * 3;
},
"C" : function(salary) {
return salary * 2;
}
};
function annualBonus(level,salary) {
return obj[level](salary);
};
console.log(annualBonus('A',10000)); // 40000