策略模式
定义:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。
举例:计算年终奖(工资、效绩),表单效验(是否为空、长度、手机号、邮箱等等)
比如公司的年终奖是根据员工的工资和绩效来考核的,绩效为A的人,年终奖为工资的4倍,
绩效为B的人,年终奖为工资的3倍,绩效为C的人,年终奖为工资的2倍;
计算年终奖
普通模式:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var awardS = function (salary) {
return salary * 4
};
var awardA = function (salary) {
return salary * 3
};
var awardB = function (salary) {
return salary * 2
};
var calculateBonus = function (level, salary) {
if (level === 'S') {
return awardS(salary);
}
if (level === 'A') {
return awardA(salary);
}
if (level === 'B') {
return awardB(salary);
}
};
calculateBonus('A', 10000);
策略模式:
1 | // 一组策略类封装具体的算法 |
策略模式指的是定义一系列的算法,把它们一个个封装起来,将不变的部分和变化的部分隔开,
实际就是将算法的使用和实现分离出来;算法的使用方式是不变的,都是根据某个算法取得计算后的奖金数,
而算法的实现是根据绩效对应不同的绩效规则;
一个基于策略模式的程序至少由2部分组成,第一个部分是一组策略类,策略类封装了具体的算法,
并负责具体的计算过程。第二个部分是环境类Context,该Context接收客户端的请求,
随后把请求委托给某一个策略类。
复合开放-封闭原则,可变的部分为策略类(一组算法),不变的部分为执行具体算法的方式。
表单验证
1 | // 这里我们实现一组策略类封装具体的验证规则 |