主题
策略模式
概念
定义一系列算法,把他们一个个封装起来,并且使他们可以相互替换
举例
实现一个计算年终奖的功能,绩效为S的人有4倍工资,A为3倍工资,B为2倍工资
没用策略模式
js
function calculateBouns (performanceLevel, salary) {
if (performanceLevel === 'S') {
return salary * 4
} else if (performanceLevel === 'A') {
return salary * 3
} else if (performanceLevel === 'B') {
return salary * 2
}
}
使用策略模式
js
const performance = {
S (salary) {
return salary * 4
},
A (salary) {
return salary * 3
},
B (salary) {
return salary * 2
}
}
function calculateBouns (level, salary) {
return performance[level](salary)
}
个人理解
有一个功能,根据不同角色,会做不同的事情
没用策略模式,会用 if-else
判断是哪一个角色,再根据角色做不同的事
- 包含过多的
if-else
语句 - 可扩展性较差,如果要新加一个角色,则需要重新在
calculateBouns
内部实现,测试老师也需要重新把整个流程走一遍
使用策略模式,则把每一个角色所做的事,用对象抽离,这样新添加角色,则只需要在 performance
中添加,而且添加不会涉及到其他角色,测试老师也就不需要重新回归了