前端设计模式(2)--策略模式

124 阅读1分钟

一,定义

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

二,场景

公司年终奖是根据员工工资基数和绩效系数决定, 比如绩效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中万物皆是对象, 所以函数也是对象, 所以直接把策略类定义为函数是最方便的做法.

环境类是连接业务和策略的桥梁.