javascript你不知道的JavaScript了不起的 WEB 前端

javascript 职责链模式

2016-12-06  本文已影响24人  smartphp

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>
上一篇下一篇

猜你喜欢

热点阅读