JS设计模式-策略模式

JS设计模式-策略模式

设想这样一个功能,公司的年终考核等级会影响员工的年终奖收入,目前为S等级3倍工资,A等级2倍工资,B等级就只能是1个月的工资了。

function bonus(level, salary) {
    if (level === "S") {
        return salary * 3
    }
    if (level === "A") {
        return salary * 2
    }
    if (level === "B") {
        return salary * 1
    }
}


bonus("A", 1000)	// 2000

bonus函数传入两个参数,第一个是考核等级,第二个是月工资收入。

但是目前还只是三个等级,如果后面领导为自己家亲戚又设定了SS等级,为了压榨打工人设定了C以下的等级,这个函数的if判断就会非常臃肿庞大,甚至后期维护起来都非常麻烦。

由此便引申出了策略模式的思想(我百度上抄的):定义一系列的算法,把它们一个个封装起来,并且使它们可以相互转化,可能并不是十分好理解,那么我把上面的代码换个方式实现,便可能了解一二了:

const bonus = {
    S: function (salary) {
        return salary * 3
    },
    A: function (salary) {
        return salary * 2
    },
    B: function (salary) {
        return salary * 1
    },
}

bonus["S"](1000)	// 3000

这便是由策略模式进行重写的代码,在JavaScript中,函数也是对象,我们可以直接把它定义在bonus对象内,来让对应的等级作为key。这样在使用的时候就可以直接调用对应等级的函数。


笔者在实际开发的时候,写过一个字符串类型数字的四则运算工具方法,如果你有兴趣,可以使用策略模式尝试编写。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cRack_cLick

感谢你的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值