文件名称:灵活可拆分的职责链节点-清华大学计算机考研经验贴.
文件大小:8.5MB
文件格式:PDF
更新时间:2024-07-15 10:06:22
javasc
13.4 灵活可拆分的职责链节点 本节我们采用一种更灵活的方式,来改进上面的职责链模式,目标是让链中的各个节点可以 灵活拆分和重组。 首先需要改写一下分别表示 3 种购买模式的节点函数,我们约定,如果某个节点不能处理请 求,则返回一个特定的字符串 'nextSuccessor'来表示该请求需要继续往后面传递: 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( '手机库存不足' ); } }; 接下来需要把函数包装进职责链节点,我们定义一个构造函数 Chain,在 new Chain 的时候传 递的参数即为需要被包装的函数, 同时它还拥有一个实例属性 this.successor,表示在链中的下 一个节点。 此外 Chain 的 prototype 中还有两个函数,它们的作用如下所示: // Chain.prototype.setNextSuccessor 指定在链中的下一个节点 // Chain.prototype.passRequest 传递请求给某个节点 var Chain = function( fn ){ this.fn = fn; this.successor = null; }; Chain.prototype.setNextSuccessor = function( successor ){ return this.successor = successor; }; Chain.prototype.passRequest = function(){ 图灵社区会员 balabala233 专享 尊重版权