概念:
定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。
优点:
策略模式利用组合,委托等技术和思想,有效的避免很多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')); console.log(annualBonus(3000,'B'));
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));
|