zoukankan      html  css  js  c++  java
  • 浅谈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判断干掉吧。

  • 相关阅读:
    万网免费主机wordpress快速建站教程-域名绑定及备案
    java小算法—大衍数列
    Core Data使用之一(Swift): 保存
    Swift 添加到TableView实现动画效果
    Swift 动态创建提示框
    Swift分割字符串
    Swift去除两边的特定字符(空格或其它)
    windows 属性
    String 输出{}
    c# 正则表达式的用户
  • 原文地址:https://www.cnblogs.com/zt123123/p/8340590.html
Copyright © 2011-2022 走看看