javascript 职责链模式

作者: smartphp | 来源:发表于2016-12-06 15:47 被阅读24次

    javascript 职责链模式-紧密耦合判读变多函数分开处理

    职责链模式是:是多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。如果是在jvascript中很好解决这个问题。 从编程上来说就是把比较复杂的if-else嵌套紧密的判断-执行逻辑使用高阶函数把判断语句中所做的事情放到函数中处理。

    逻辑处理的复杂度并没有改变,但是各个处理部分就分散到函数中去了。每个函数只做两件事情,能处理就处理,不能处理就交给其他函数,或者把自己的逻辑,通过异步再通知下一个函数进行处理。 这样通过单个函数内部的指针简化紧密嵌套的逻辑。
    我作为初学者感觉到这样处理,代码读起来非常清晰。但是执行的效率是不是和紧密嵌套的逻辑一样我就不知道了。或许是用时间换代码的易读性。

    //实例来自《js设计模式与开发实践》
    <script type="text/javascript">
        var order500 = function( orderType, pay, stock ){
            if ( orderType === 1 && pay === true ){//根据orderType,pay进行任务分配
                console.log( '500 元定金预购, 得到100 优惠券' ); //符合order500条件,直接执行逻辑
            }else{
               //不符合order500条件交个order200处理,order500任务完成
                order200( orderType, pay, stock ); // 将请求传递给200 元订单
            }
    
        };
        // 200 元订单
        var order200 = function( orderType, pay, stock ){
            if ( orderType === 2 && pay === true ){//符合order200条件
                console.log( '200 元定金预购, 得到50 优惠券' ); //执行逻辑
            }else{
               //条件不符合,传给下一个函数处理
                orderNormal( orderType, pay, stock ); // 将请求传递给普通订单
            }
        };
        // 普通购买订单
        var orderNormal = function( orderType, pay, stock ){
            if ( stock > 0 ){
                console.log( '普通购买, 无优惠券' );
            }else{
                console.log( '手机库存不足' );
            }
        };
    
        // 测试结果:
        order500( 1 , true, 500); // 输出:500 元定金预购, 得到100 优惠券
        order500( 1, false, 500 ); // 输出:普通购买, 无优惠券
        order500( 2, true, 500 ); // 输出:200 元定金预购, 得到500 优惠券
        order500( 3, false, 500 ); // 输出:普通购买, 无优惠券
        order500( 3, false, 0 ); // 输出:手机库存不足
    </script>
    

    相关文章

      网友评论

        本文标题:javascript 职责链模式

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