JavaScript之策略模式

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

举个栗子

假设我们要实现一个计算个人奖金数额的函数:

        var calcBonus = function (level, salary) {
            if (level === 'A') {
                return salary * 4;
            }
            if (level === 'B') {
                return salary * 3;
            }
            if (level === 'C') {
                return salary * 2;
            }
        }

        console.log(calcBonus('A', 1000));  // 输出 4000
        console.log(calcBonus('B', 1000));  // 输出 4000

这段代码的缺点显然易见:

  1. 函数体庞大,包含大量的if-else
  2. 缺乏弹性,如果想增加一种’D’等级,或者把绩效A的奖金系数变成5将会非常麻烦,要深入函数内部改变函数体。
  3. 代码复用性差,如果想在程序的其他部分想用这些计算奖金的算法我们就只有复制粘贴啦。

使用策略模式重构代码

        var strategies = {
            'A': function (salary) {
                return salary * 4;
            },
            'B': function () {
                return salary * 3;
            },
            'C': function () {
                return salary * 2;
            }
        }

        var calcBonus = function (leve, salary) {
            return strategies[level](salary);
        }

        console.log(calcBonus('A', 2000)); //输出 8000

策略模式优缺点

优点:

  1. 利用组合,委托和多态等技术和思想,可以有效避免多重条件语句
  2. 提供了对开闭原则的支持,将算法独立封装在strategies里面。
  3. 模式中的算法可以复用在多个地方。

缺点:

  1. 增加了大量的策略对象
  2. 要是用策略模式就要了解所有策略的实现
  3. 暴漏了算法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值