zoukankan      html  css  js  c++  java
  • JS设计模式(2)策略模式

    什么是策略模式?

    定义:根据不同参数可以命中不同的策略

    主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。

    何时使用:有许多种情况,而区分它们的只是他们直接的行为。

    如何解决:通过一个hash对象,来映射不同的策略。

    优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性、复用性良好。

    缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。

    使用场景: 1.需要动态地根据行为改变运行方法。2.为了减少代码,同时为了让代码具有更好的可读性。3.需要对策略进行统一管理。

    JavaScript中的策略模式

    观察如下获取年终奖的 demo,根据不同的参数(level)获得不同策略方法(规则),这是策略模式在 JS 比较经典的运用之一。

    const strategy = {
      'S': function(salary) {
        return salary * 4
      },
      'A': function(salary) {
        return salary * 3
      },
      'B': function(salary) {
        return salary * 2
      }
    }
    
    const calculateBonus = function(level, salary) {
      return strategy[level](salary)
    }
    
    calculateBonus('A', 10000) // 30000

    在函数是一等公民的 JS 中,策略模式的使用常常隐藏在高阶函数中,稍微变换下上述 demo 的形式如下,可以发现我们平时已经在使用它了,恭喜我们又掌握了一种设计模式。

    const S = function(salary) {
      return salary * 4
    }
    
    const A = function(salary) {
      return salary * 3
    }
    
    const B = function(salary) {
      return salary * 2
    }
    
    const calculateBonus = function(func, salary) {
      return func(salary)
    }
    
    calculateBonus(A, 10000) // 30000
  • 相关阅读:
    HDU 5883 F
    关于codeblock 为什么不能调试
    Codeforces Round #378 (Div. 2) D. Kostya the Sculptor 分组 + 贪心
    51NOD 区间的价值 V2
    NYOJ 42 一笔画问题
    如何对二维字符数组进行排序
    hihoCoder 1383 : The Book List 北京网络赛
    利用IDA学习一个简单的安卓脱壳
    iOS APP可执行文件的组成
    Mac10.11 搭建php开发环境
  • 原文地址:https://www.cnblogs.com/wuguanglin/p/StrategyPattern.html
Copyright © 2011-2022 走看看