js职责链模式

来源:互联网 发布:java核心技术 pdf 编辑:程序博客网 时间:2024/04/28 19:16
     <h1>灵活可拆分的职责链节点案例</h1>     <script>         var order500 = function( orderType, pay, stock ){            if( orderType === 1 && pay === true ){               console.log( "500元定金预购,得到100元优惠券" );            }else{               return "nextSuccessor";            }         };                  var order200 = function( orderType, pay, stock ){            if( orderType === 2 && pay === true ){               console.log( "200元定金预购,得到50元优惠券" );            }else{               return "nextSuccessor"            }         };                  var orderNormal = function( orderType, pay, stock ){            if( stock > 0 ){               console.log( "普通购买,无优惠券 " );            }else{               console.log( "手机库存不足" );            }         };                  var Chain = function( fn ){            this.fn = fn;            this.successor = null;         };                  Chain.prototype.setNextSuccessor = function( successor ){            return this.successor = successor;         };                  Chain.prototype.passRequest = function(){            var res = this.fn.apply( this, arguments );                        if( res === "nextSuccessor" ){               return this.successor.passRequest.apply( this.successor, arguments );            }                        return res;         };                  //现在我们吧3个订单函数分别包装成职责链的节点         var chainOrder500 = new Chain( order500 );         var chainOrder200 = new Chain( order200 );         var chainOrderNormal = new Chain( orderNormal );         //然后指定节点在指责链的顺序         chainOrder500.setNextSuccessor( chainOrder200 );         chainOrder200.setNextSuccessor( chainOrderNormal );         //最后传递请求         chainOrder500.passRequest( 1, false, 0 );         //通过改进,我们可以自由灵活地增加、移除和修改链接中的节点,         //假如某天网站运营人员又提出支持300远的定金购买,那我们就在该链中增加一个节点即可     </script>

0 0
原创粉丝点击