美文网首页
策略模式

策略模式

作者: bby365 | 来源:发表于2018-06-27 20:36 被阅读0次

    定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换
    翻译成人话:根据不同的情况,可以自由调用已经封装好的函数(算法)。
    再来看看官方定义:策略模式由两部分组成;第一部分是策略组,封装具体算法,负责具体的计算过程;第二部分是环境类,接受客户请求,然后委托给某一个策略类去处理。

    • js 中的策略模式
      一个计算年终奖的例子
    // 第一部分:策略组,负责具体的实现过程
    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语句,缺点如下:
    需要覆盖所有的逻辑分支,后期更改代码,需要深入到函数内部。

    • 拓展
      策略模式中的 策略组不仅用来封装算法,可以用来封装业务逻辑。

    表单验证例子
    **用户名不能为空
    **密码长度不能少于6位
    **手机号必须符合格式

    常规方法:if-else 语句
    策略模式:P81 一步一步的优化。

    相关文章

      网友评论

          本文标题:策略模式

          本文链接:https://www.haomeiwen.com/subject/qsbiyftx.html