思路:使用一个储存器,将不同“职责”的处理函数储存起来,之后通过一个统一入口,来处理储存器中的的“职责”函数,将执行有效的结果,立即返回,到此,职责处理完毕。
应用:
- 在对于传递不同的参数来处理不同的功能;
- 将功能分“职责”,结构清晰,功能分明;
- 使用函数的方式,来代替了函数 内部的if逻辑过于负责的判断,可以无限的扩展,最重要的是,可以在不不动原来的函数的基础上,就可以添加其他的“职责”处理函数;
/**职责链模式的思维*/
//储存器
var middleware = [];
function turning(){
var ret;
if(arguments.length > 0){
for(var i = 0,len = middleware.length; i < len; i++){
//执行每一个“职责”处理函数
ret = middleware[i].apply(turning,arguments);
//如果有返回结果,表示middleware当前item的执行有效,就立即返回结果
if(ret){
return ret;
}
}
}
}
//添加“职责”处理函数
turning.init = function(fn){
middleware.unshift(fn);
}
//在这里可以添加非常多的类似职责的处理函数
turning.init(function(a){
if(a === "hello"){
return a + " world";
}
});
turning.init(function(a,b){
if(typeof a === 'number' && typeof b === 'number'){
return a + b;
}
});
//开始应用了
alert(turning("hello"));
alert(turning(5,9));