第五章 策略模式


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

举一个例子: 公司年底绩效,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中策略模式已经通道语言的本身里,策略往往被函数所替代。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1 场景问题# 1.1 报价管理## 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的...
    七寸知架构阅读 10,563评论 9 62
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,282评论 19 139
  • 1 场景问题 1.1 报价管理 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的客户要...
    4e70992f13e7阅读 8,325评论 2 16
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,422评论 2 17
  • 1、Friends S9 S10 S2 2、《空房间》 3、《爸爸去哪儿5》 4、Rick and Morty 5...
    风_霜阅读 1,715评论 0 0

友情链接更多精彩内容