首页 > 其他 > 详细

设计模式应用-策略模式

时间:2019-12-01 15:53:08      阅读:72      评论:0      收藏:0      [点我收藏+]
      平时的工作中小伙伴们比较关心的除了基本工资,岗位工资,各种补助吧啦吧啦,最后当然还有年终奖了,虽然不是人人都有的,举个栗子:绩效为A的小伙伴,年终奖为6个月工资;绩效为B的小伙伴,年终奖为3个月工资;绩效为C的小伙伴,年终奖为2个月工资,一个简单的薪资计算公式就来了
        function calculateBonus (performanceLevel, salary) {
            if(performanceLevel===‘A‘){
                return salary * 6
            }
            if(performanceLevel===‘B‘){
                return salary * 3
            }
            if(performanceLevel===‘C‘){
                return salary * 2
            }
        }
 
       calculateBonus (‘A‘,  2000) =>    12000 轻松实现
     分割线================================================================
     显然这样的方式可以实现想要的结果,但是从单一职责原则来看,对于不同的级别,有一天我们需要修改相应的奖金倍数,势必要改函数体的逻辑
     考虑把计算逻辑抽离
        let performanceA = function(salary){
            return salary * 6
        };
        let performanceB = function(salary){
            return salary * 3
        };
        let performanceC = function(salary){
            return salary * 2
        };
        let calculateBonus = function (performanceLevel, salary) {
            if(performanceLevel===‘A‘){
                return performanceA(salary)
            }
            if(performanceLevel===‘B‘){
                return performanceB(salary)
            }
            if(performanceLevel===‘C‘){
                return performanceC (salary)
            }
        }
   
        这样的话,对于不同级别的奖金,只需要修改相应的计算逻辑而不需要再动外部的计算逻辑,这样比上一步好一些,但是依然有优化的空间,每个人都有奖金,体现不了区别,公司说了我们要增加一个级别D,没有奖金,这个时候又要改逻辑包括计算逻辑。
    分割线=================================================================
    let strategy = {
        "A":function(salary){
            return salary * 6
        },
        "B":function(salary){
            return salary * 3
        },
        "C":function(salary){
            return salary * 2
        },
        "D":function(salary){
            return 0
        },
    };
 
    function calculateBonus (level,salary) {
        return strategy[level](salary)
    }
 
    calculateBonus("A", 2000)
 
   到这,基本没有什么可以优化的了,无论是新增一个级别还是修改一个级别对应的奖金,都足以在最小的改动下满足,而不需要改动主方法
 
 

设计模式应用-策略模式

原文:https://www.cnblogs.com/doublewill/p/11966158.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!