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设计模式与开发实践》