一,定义
定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换.
二,场景
公司年终奖是根据员工工资基数和绩效系数决定, 比如绩效S, 发放4倍工资; 绩效A, 发放3倍工资; 绩效B, 发放2倍工资; 绩效C, 发放1倍工资.
三,实现方式
普通的 if else, switch方法不多说. 缺点是违反了软件开发的基本原则: 对修改关闭,对扩展开放.
策略模式两大基本要素:
1, 策略类: 封装具体的策略算法,并且负责具体的计算过程.
2, 环境类: 接受客户的请求, 随后根据业务需要, 将请求委托给某一个具体的策略类.
//策略
const strateies = {
S: (salary) => salary * 4,
A: (salary) => salary * 3,
B: (salary) => salary * 2,
};
//环境
const calculateBonus = (level, salary) => strateies[level](salary);
//使用
console.log(calculateBonus('S', 20000));
console.log(calculateBonus('A', 10000));
四, 总结
js中万物皆是对象, 所以函数也是对象, 所以直接把策略类定义为函数是最方便的做法.
环境类是连接业务和策略的桥梁.