第五章 策略模式


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

举一个例子: 公司年底绩效,S有4倍工资,A有3倍工资,B有2倍工资,那么普通的实现如下:

    var calculateBonus = function(_level, _salary){
        if(_level == 'S'){
            return _salary*4;
        }
        if(_level == 'A'){
            return _salary*3;
        }
        if(_level == 'B'){
            return _salary*2;
        }
    }

上面的实现中,如果改了S为5倍工资, 或者添加一个C级别,都要去函数里添加或者修改逻辑。秉承着设计模式将不变的部分和变化的部分隔开这一主题,分析可知,算法的使用方式是不变的,变的是算法本身,因此我们改成下面的形式:

    var strategies = {
        "S": function( salary ){
            return salary*4;
        },
        "A": function( salary ){
            return salary*3;
        },
        "B": function( salary ){
            return salary*2;
        }
    }
    
    var calculateBonus = function(level, salary){
        return strategies[level](salary);
    }

Peter Norving在演讲中提到:在函数作为一等对象的语言里,策略模式是隐形的。 在js中策略模式已经通道语言的本身里,策略往往被函数所替代。

你可能感兴趣的:(第五章 策略模式)