第五章、策略模式
定义:定义一些列算法,把他们一一封装,并且他们可以相互替换。
核心:将算法的实现和算法的使用分离
一个基于策略模式的程序至少由两部分组成。第一个部分是一组策略类,第二个部分是环境类Context。
- 策略类:策略类封装了具体的算法,并负责具体的计算过程。
- 环境类Context:环境类Context接受客户的请求,随后把请求委托给某一个策略类。
案例:计算奖金,绩效分别为S、A、B,奖金分别为4、3、 2倍;
最初代码实现
var calculateBunus = function(preformancelevel, salary) {
if(preformancelevel === 'S') {
return salary * 4;
}
if(preformancelevel === 'A') {
return salary * 3;
}
if(preformancelevel === 'B') {
return salary * 2;
}
}
calculateBunus('B', 2000) // 4000;
calculateBunus('S', 4000) // 16000;
- 代码简单明了,但缺点也显而易见:
calculateBunus函数比较庞大,包含了很多if-else语句,这些语句需要覆盖所有逻辑的分支。 - calculateBunus函数缺乏弹性,如果新增一个“C”字段,或者把"S"的奖金系数改为5倍,必须在calculateBunus函数内部修改,这样就违反了开放-封闭的原