js设计模式--策略模式

js设计模式--策略模式

设计模式的宗旨: 把不变的和变化的分开。

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

分析:根据设计模式的宗旨,这里是分成两个部分,一个部分是定义好的算法,这个是属于变化的部分,一部分属于调用算法部分,这部分属于不变部分

以计算员工工资为例子:

  1. 员工的工资分成基本工资+绩效工资
  2. 绩效工资 = 基本工资 * 等级参数
  3. 等级有A,B,C对应的等级参数是 0.4, 0.3, 0.2

我们先来定义好算法部分:

const strategy = {
    'A': function(salary){
        return salary*(1 + 0.5)
    },
    'B': function(salary){
        return salary*(1 + 0.4)
    },
    'C': function(salary){
        return salary*(1 + 0.3)
    }
}

分析:strategy里面的三个方法都是可以相互替换的,方法参数都是基本工资,输入时总共工资

现在来下写不变的一部分,看看是怎么调用算法的

function getTotalSalary(level, salary) {
    return strategy[level](salary)
}

分析: 这个函数,接受了等级(level)和基本工资(salary)两个参数,然后去调用strategy对应的函数的方法,这就是把计算总共工资委托给了stragegy的方法,所以getTotalSalary是不做计算工资的工作的,这样也就是实现了多态

最后我们来调用一下

getTotalSalary('A', 1828); //2742
getTotalSalary('B', 2828); //3959.2
getTotalSalary('C', 4828); //6276.4

分析:这样如果再想添加一个等级D,我们主要在策略里面进行添加就行了,避免代码重复的复制粘贴。这样结构清楚,且解决我们多重的if...else..if。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值