策略模式【设计模式】

以下是一个计算奖金的函数,该函数需要接受两个参数,员工的工资数额和绩效等级。

var calcBonus = function (performanceLevel, salary) {
  if (performanceLevel === "S") {
    return salary * 4;
  }
  if (performanceLevel === "A") {
    return salary * 3;
  }
  if (performanceLevel === "B") {
    return salary * 2;
  }
};

在这个方法中问题:

1.包含很多if-else语句

2.缺乏弹性,如果增加一中新的绩效等级C,或者想修改S等级的系数,那么我们就需要修改该函数的内部实现。

3.算法复用性差。

我们可以使用策略模式来重构代码。

定义

策略模式指的是定义一系列算法,把它们一个个封装起来。讲不变的部分和变化的部分分隔开是每个设计模式的主题,策略模式也是如此,策略模式的目的就是将算法的使用与算法的实现分离开来。

策略模式设计

一个基于策略模式的程序至少由两部分组成。第一个部分是一组策略类,封装具体的算法,并负责具体的计算过程。第二个部分是环境类Context,Context接受客户请求,随后把请求委托给某一个策略类。

使用策略模式改造上述代码:

var strategies = {
  S: function (salary) {
    return salary * 4;
  },
  A: function (salary) {
    return salary * 3;
  },
  B: function (salary) {
    return salary * 2;
  },
};
var calcBonus = function (performanceLevel, salary) {
  return strategies[performanceLevel](salary);
};

console.log(calcBonus("S", 1000));

策略模式的优点

1.策略模式利用组合、委托和多态等技术和思想,可以有效避免多重条件选择语句。

2.策略模式提供了对开放-封闭原则的完美支持,将算法封装在独立的strategy中,使得他们易于切换,易于理解,易于扩展。

3.策略模式中的算法也可以复用在系统的其他地方。

4.策略模式利用组合和委托让Context拥有执行算法的能力,这也是继承的一种更轻便的替代方案。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值