JavaScript设计模式之策略模式-优化if条件过多

1.定义

策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。

2.策略模式的实现-优化if条件过多

以计算年终奖为例子,绩效为S的人年终奖有4倍工资,绩效为A的人年终奖有3倍工资,而绩效为B的人年终奖是2倍工资。

如果没有用策略模式,就会写出下面这样的代码:

let bonus;
if (performanceLevel === 'S') {
    bonus = salary * 4;
} else if (performanceLevel === 'A') {
    bonus = salary * 3;
} else if (performanceLevel === 'B') {
    bonus = salary * 2;
}

像上面这样多个if条件的开发方式,在实际开发非常常见,如果只是三个还好,但需求总会不断增加,若一直以if条件堆叠,维护性就很差。策略模式就可以完美解决这个问题。如下:

// 封装绩效计算规则
const strategies = {
    "S": function (salary) {
        return salary * 4;
    },
    "A": function (salary) {
        return salary * 3;
    },
    "B": function (salary) {
        return salary * 2;
    }
};
// 接受等级与工资进行计算
const calculateBonus = function (level, salary) {
    return strategies[level](salary);
}
calculateBonus('B', 20000); // 输出:40000 
calculateBonus('S', 6000); // 输出:24000

我们将绩效计算规则封装在以等级为key,以算法为value的对象中,有效避免多重条件选择语句,显得简洁易于理解。在后期扩展也只需要再对象中新增一项,方便维护。

注:参考书籍《JavaScript设计模式与开发实践》

猜你喜欢

转载自blog.csdn.net/qq_39287602/article/details/108731242