策略模式
定义:定义一系列的算法,把它们一个一个封装起来,并且使它们可以相互替换。
使用策略模式计算奖金
需求为绩效S的人4倍奖金,绩效为A的人3倍奖金,绩效为B的人年终奖是2倍工资。
var caculateBonus = function(performanceLevel, salary){
if(performanceLevel === 'S'){
return salary * 4;
}
if(performanceLevel === 'A'){
return salary * 3;
}
if(performanceLevel === 'B'){
return salary * 2;
}
}
这段代码有一些缺点,如果我们想改变绩效的奖金系数,我们必须修改calculateBonus函数的内部实现,这是违反开放-封闭原则的。算法的复用性很差,如果在程序的其他地方需要重用这些计算奖金的方法,就只有复制和粘贴。
使用组合函数重构代码
我们把各种算法封装到一个个小函数里面,这些小函数有着良好的命名,可以一目了然知道它对应者哪种算法
var performanceS = function(salary){
return salary * 4;
};
var performanceA = function(salary){
return salary * 3;
};
var performanceB = function(salary){
return salary * 2;
}
var calculateBonus = function(performanceLevel, salary){
if(performanceLevel === 'S'){