设计模式-javascript实现【策略模式】

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

实现方案一:将算法集中在对象中进行管理,利用对象的key值选取需要的算法

// 定义策略对象的一系列算法
const strategies = {
  "S": salary => salary * 4,
  "A": salary => salary * 3,
  "B": salary => salary * 2,
};

// 根据level委托策略对象的具体算法执行计算逻辑
const calculateBonus = (level, salary) => {
  return strategies[level](salary); 
};

console.log(calculateBonus('S', 2000)); // 8000
console.log(calculateBonus('A', 1000)); // 3000

实现方案二:将选中的算法作为参数传入执行函数

const S = salary => salary * 4;
const A = salary => salary * 3;
const B = salary => salary * 2;
const calculateBonus = (func, salary) => func(salary);

console.log(calculateBonus(S, 1000)); // 4000

策略模式的优点:

  • 策略模式利用组合,委托和多态等技术思想,可以有效地避免多重条件选择语句。
  • 策略模式提供了对开发-封闭原则的完美支持,将算法封装在独立的strategy中,使得它们易于切换,易于理解
    ,易于扩展。
  • 策略模式的算法也可以复用在系统的其他地方,从而避免许多重复的复制粘贴工作。
  • 在策略模式中利用组合和委托来让Context拥有执行算法的能力,这也是继承的一种更轻便的替代方案。
posted @ 2023-03-04 00:02  箫笛  阅读(137)  评论(0)    收藏  举报