簡介
職責鏈使多個對象都有機會處理請求避诽,將這些對象連成一條鏈,并沿著這條鏈傳遞該請求璃谨,知道有一個對象
處理他為止沙庐。避免了請求發(fā)送者和接受者之間的耦合。
簡單的職責鏈實現(xiàn)
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();
增加對異步請求的處理 可以讓節(jié)點有權(quán)力決定什么時候把請求傳遞給下一個節(jié)點
Chain.prototype.next=function() {
if (this.successor) {
return this.successor.passRequest.apply(this.successor,arguments);
}
}
利用AOP實現(xiàn)職責鏈
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;
}
}