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。这样在使用的时候就可以直接调用对应等级的函数。
笔者在实际开发的时候,写过一个字符串类型数字的四则运算工具方法,如果你有兴趣,可以使用策略模式尝试编写。