zoukankan      html  css  js  c++  java
  • JS设计模式之策略模式

     1、假设现在要根据绩效计算年终奖

    function rewardCalc(level, salary){
        if(level === 'S') {
            return salary * 4
        } else if(level === 'A') {
            return salary * 3
        } else if(level === 'B') {
            return salary * 2
        }
    }

      //上述代码缺陷:1、if else逻辑过多函数庞大    2、缺乏弹性增加绩效就必须深入函数更改代码   3、年终奖计算方法无法复用

    策略模式初步使用, 将方法抽离

    const calcLevelS = salary => salary * 4
    const calcLevelA = salary => salary * 3
    const calcLevelB = salary => salary * 2
    function rewardCalc(level, salary) {
      if(level === 'S'){
       calcLeverS(salary)  
      } else if(level === 'A'){
        calcLevelA(salary)
      } else if(level === 'B') {
        calcLevelB(salary) 
      }
    }
    //计算规则已经分离, 但是if else逻辑过多仍然没有解决  

    再次重构,消除if语句

    const calcLevelS = salary => salary * 4
    const calcLevelA = salary => salary * 3
    const calcLevelB = salary => salary * 2
    function rewardCalc(level, salary) {
        const mapMoney = {
            S: calcLevelS,
            A: calcLevelA,
            B: calcLevelB,
        }
        return mapMoney[level](salary)
    }
  • 相关阅读:
    DOM
    JavaScript 数组的方法总结
    vuex 状态持久化插件 —— vuex-persistedstate
    移动端1px细线
    CSS多行文本并显示省略号
    Java面试题
    Git提交分支
    Redis的安装配置
    Spring IoC
    单例模式
  • 原文地址:https://www.cnblogs.com/jxjl/p/14119496.html
Copyright © 2011-2022 走看看