• 浅谈js设计模式之策略模式


    策略模式有着广泛的应用。本节我们就以年终奖的计算为例进行介绍。

    很多公司的年终奖是根据员工的工资基数和年底绩效情况来发放的。例如,绩效为 S的人年
    终奖有 4倍工资,绩效为 A的人年终奖有 3倍工资,而绩效为 B的人年终奖是 2倍工资。假设财
    务部要求我们提供一段代码,来方便他们计算员工的年终奖。

    一开始,你可能会这样组织你的代码

    var calculateBonus = function(performanceLevel, salary) {
        if(performanceLevel === 'S') {
            return salary * 4;
        }
        if(performanceLevel === 'A') {
            return salary * 3;
        }
        if(performanceLevel === 'B') {
            return salary * 2;
        }
    };
    calculateBonus('B', 20000); // 输出:40000
    calculateBonus('S', 6000); // 输出:24000

    当然,这样写没毛病,但是有几个缺点。

    1.  calculateBonus 函数比较庞大,包含了很多 if-else 语句,这些语句需要覆盖所有的逻辑
    2.  calculateBonus 函数缺乏弹性,如果增加了一种新的绩效等级 C,或者想把绩效 S 的奖金系数改为 5,那我们必须深入 calculateBonus 函数的内部实现,这是违反开放封闭原则的。
    3. 算法的复用性差,如果在程序的其他地方需要重用这些计算奖金的算法呢?我们的选择只有复制和粘贴。

    接下来使用策略模式来重构代码,对比一下

    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);
    };
    console.log(calculateBonus('S', 20000)); // 输出:80000
    console.log(calculateBonus('A', 10000)); // 输出:30000

    这样看起来不是好了很多吗,维护起来方便,代码精简。而不是一堆if else判断语句,快去重构你的代码,把if判断干掉吧。

  • 相关阅读:
    Redis单点登录
    MySQL有哪些存储引擎,各自的优缺点,应用场景
    MySQL慢查询优化、索引优化、以及表等优化总结
    Redis缓存和MySQL数据一致性方案详解
    Jenkies+github实现代码自动构建
    Python基础-day14-单元测试注册小例子
    Python基础-day13-unitest框架(Suite、runner)及生成报告,附带最新的HTMLTestRunnerNew.py文件
    Python基础-day11-继承和动态设置属性
    Python基础-day10-类的创建和调用
    Python基础-day03 字符串
  • 原文地址:https://www.cnblogs.com/zt123123/p/8340590.html
Copyright © 2020-2023  润新知