Skip to content

策略模式

概念

定义一系列算法,把他们一个个封装起来,并且使他们可以相互替换

举例

实现一个计算年终奖的功能,绩效为S的人有4倍工资A3倍工资B2倍工资

没用策略模式

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 中添加,而且添加不会涉及到其他角色,测试老师也就不需要重新回归了