1. 策略模式概述
策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。其核心思想是将'做什么'和'怎么做'分离,允许客户端在运行时选择具体的算法实现。
例如,计算年终奖时,绩效 S、A、B 的算法不同,但都属于'计算奖金'这一行为。策略模式将这些算法封装,便于管理和切换。
2. 策略模式结构
策略模式通常包含两部分:
- 策略对象:负责具体执行算法,如不同的奖金计算逻辑或动画缓动公式。
- 环境对象:负责接收请求,并将任务委托给当前设置的策略对象。
3. 案例一:年终奖计算
3.1 基础实现:if-else 嵌套
初学者常采用条件判断直接编写逻辑:
var calculateBonus = function(performanceLevel, salary) {
if (performanceLevel === 'S') {
return salary * 4;
}
if (performanceLevel === 'A') {
return salary * 3;
}
if (performanceLevel === 'B') {
return salary * 2;
}
};
calculateBonus('B', 20000); // 40000
calculateBonus('S', 6000); // 24000
该写法的问题在于:
- 函数臃肿,新增绩效等级需修改原有代码。
- 算法耦合在函数内部,复用性差。
- 维护成本高,修改逻辑易引发副作用。
3.2 优化拆分:独立函数
将算法提取为独立函数,但仍依赖条件分发:
var performanceS = function(salary) { return salary * 4; };
var performanceA = function(salary) { return salary * ; };
performanceB = () { salary * ; };
calculateBonus = () {
(performanceLevel === ) (salary);
(performanceLevel === ) (salary);
(performanceLevel === ) (salary);
};


