zoukankan      html  css  js  c++  java
  • 设计模式--策略模式

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

    很多公司的年终奖是根据员工的工资基数和年底绩效情况来发放的。例如,绩效为 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

    calculateBonus 函数缺乏弹性,如果增加了一种新的绩效等级 C,或者想把绩效 S 的奖金系数改为 5, 那我们必须深入 calculateBonus 函数的内部实现,这是违反开放封闭原则的。算法的复用性差,如果在程序的其他地方需要重用这些计算奖金的算法呢?我们的选择只有复制和粘贴。
    JavaScript的策略模式

    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

    这样算法和规则分开了,可以根据需要修改对应的内容就可以实现自己想要的功能

    常见的使用策略模式的地方是jq动画中的运动模式,就是把不同的运动策略传入jq动画中

     

  • 相关阅读:
    java实现第六届蓝桥杯立方尾不变
    java实现第六届蓝桥杯立方尾不变
    java实现第六届蓝桥杯隔行变色
    java实现第六届蓝桥杯隔行变色
    java实现第七届蓝桥杯交换瓶子
    java实现第七届蓝桥杯交换瓶子
    java实现第七届蓝桥杯寒假作业
    Ubuntu 美团sql优化工具SQLAdvisor的安装(转)
    mapper提示Could not autowire. No beans of … type found?
    aop 中joinpoint的使用方法
  • 原文地址:https://www.cnblogs.com/wyongz/p/11356020.html
Copyright © 2011-2022 走看看