职责链模式

简介

职责链使多个对象都有机会处理请求,将这些对象连成一条链,并沿着这条链传递该请求,知道有一个对象
处理他为止。避免了请求发送者和接受者之间的耦合。

简单的职责链实现


var 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();

增加对异步请求的处理 可以让节点有权力决定什么时候把请求传递给下一个节点

    Chain.prototype.next=function() {
      if (this.successor) {
          return this.successor.passRequest.apply(this.successor,arguments);
      }
    }

利用AOP实现职责链

Function.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;
  }
}

你可能感兴趣的:(职责链模式)