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

来源:互联网 发布:java中indexof的用法 编辑:程序博客网 时间:2024/05/16 17:06
// 根据表现水平,来决定年终奖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));
原创粉丝点击