1、假设现在要根据绩效计算年终奖
function rewardCalc(level, salary){
if(level === 'S') {
return salary * 4
} else if(level === 'A') {
return salary * 3
} else if(level === 'B') {
return salary * 2
}
}
//上述代码缺陷:1、if else逻辑过多函数庞大 2、缺乏弹性增加绩效就必须深入函数更改代码 3、年终奖计算方法无法复用
策略模式初步使用, 将方法抽离
const calcLevelS = salary => salary * 4
const calcLevelA = salary => salary * 3
const calcLevelB = salary => salary * 2
function rewardCalc(level, salary) {
if(level === 'S'){
calcLeverS(salary)
} else if(level === 'A'){
calcLevelA(salary)
} else if(level === 'B') {
calcLevelB(salary)
}
}
//计算规则已经分离, 但是if else逻辑过多仍然没有解决
再次重构,消除if语句
const calcLevelS = salary => salary * 4
const calcLevelA = salary => salary * 3
const calcLevelB = salary => salary * 2
function rewardCalc(level, salary) {
const mapMoney = {
S: calcLevelS,
A: calcLevelA,
B: calcLevelB,
}
return mapMoney[level](salary)
}