解耦请求发送者和N个接收者之间的复杂关系 职责链中的节点数量和顺序是可以自由变化的,我们可以在运行时决定链中包含哪些节点。 可以在链尾增加一个保底的接受者节点
对象设置successor并执行passRequest方法
class Chain {construcor(private fn,private successor) {}setNextSuccessor(successor) {return this.successor = successor; // 注意return,可链式调用}passRequest() {var ret = this.fn.apply(this, arguments);if (ret = 'nextSuccessor') {return this.next();}return ret;}next() {return this.successor && this.successor.apply(this.successor, arguments);}}// 把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, true, 500);// 请求传递给任意节点chainOrderNormal.passRequest(1, false, 500);// 可增加order300// 异步职责链,手动传递请求给职责链的下一个节点var chainOrder200 = new Chain(function () {// 执行,返回undefinedsetTimeout(() => {this.next();}, 300);});
AOP模式
after函数
Function.prototype.after = function (fn) {return () => {var ret = this.apply(this, arguments);if (ret === 'nextSuccessor') {return fn.apply(this, arguments);}return ret;}}var order = order500.after(order200).after(orderNormal);
