设计模式--职责链模式 发表于 2017-03-22 简介职责链使多个对象都有机会处理请求,将这些对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理他为止。避免了请求发送者和接受者之间的耦合。 简单的职责链实现123456789101112131415161718192021222324252627282930313233343536var Chain=function(fn) { this.fn=fn; this.successor=null; } Chain.prototype.setNextSuccessor=function(successor) { return this.successor=successor; } Chain.prototype.passRequest=function() { var ret=this.fn.apply(this,arguments); if (ret==='nextSuccessor' && this.successor) { return this.successor.passRequest.apply(this.successor,arguments); } return ret; } //使用 var fn1=new Chain(function() { console.log(1); return 'nextSuccessor'; }) var fn2=new Chain(function() { console.log(2); return 'nextSuccessor'; }) var fn3=new Chain(function() { console.log(3); }) fn1.setNextSuccessor(fn2); fn2.setNextSuccessor(fn3); fn1.passRequest(); 增加对异步请求的处理 可以让节点有权力决定什么时候把请求传递给下一个节点12345Chain.prototype.next=function() { if (this.successor) { return this.successor.passRequest.apply(this.successor,arguments); }} 利用AOP实现职责链12345678910Function.prototype.after=function(fn) { var self=this; return function() { var ret=self.apply(this,arguments); if (ret==='nextSuccessor') { return fn.apply(this,arguments); } return ret; }}