您的位置:首页 > Web前端 > JavaScript

策略模式--js设计模式与开发实践-7

2017-09-11 22:19 639 查看
// 根据表现水平,来决定年终奖
var calculateBonus=function(performanceLevel,salary){
if(performanceLevel==="S"){
return salary*4
}
if(performanceLevel==="A"){
return salary*3
}
if(performanceLevel==="B"){
return salary*2
}
}
console.log(calculateBonus("B", 20000));
console.log(calculateBonus("S", 6000));


calculateBonus函数比较庞大,包含了很多if-else语句;

缺乏弹性,如果增加了一种新的绩效等级C,或者想把绩效S的将近系数改为5,那就需要深入calculateBonus的内如实现,但这样违法开放-封闭原则;

所以可以按照以下来重构代码:

var strategies={
"S":function(salary){
return salary*4
},
"A":function(salary){
return salary*3
},
"B":function(salary){
return salary*2
}
}
var calculateBonus=function(level,salary){
return strategies[level](salary)
}
console.log(calculateBonus("S", 2000));
console.log(calculateBonus("B", 10000));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式 函数