介绍

职责链模式(责任链)是使多个对象有机会处理请求,以避免请求的发送方和接收方之间的耦合关系。将对象连接到一个链中,并沿着链传递请求,直到其中一个对象处理他。

也就是说,请求后,从第一个对象,接收请求的链过程亲自或转发到下一个候选链中的对象。对象提交请求不清晰地知道哪些对象将处理它-这是,要求有一个隐含的受体(隐接收机)。根据运行时间,任何候选人可以回应相应的要求,候选人的数量是任意的,你可以决定参与链在运行时它的候选人。

文本

对于Javascript实现,我们可以使用它的原型特性来实现责任链模式。

复制代码代码如下所示:

无功no_topic = - 1;

VaR的话题;

函数汉德勒(s,t){

this.successor =零| |;

this.topic = T | | 0;

}

handler.prototype = { {

句柄:函数(){

如果(这个继承者){

This.successor.handle()

}

},

函数(){

返回this.topic!= no_topic;

}

};



处理程序只接受2个参数,第一个是后继(处理向下传递的请求,第二个是传输级)(可以用来控制是否在某个级别上执行操作,不能),处理程序原型揭示了一种句柄方法,这是实现第一种模式的关键。看看如何使用上面的代码。

复制代码代码如下所示:

var =新的处理程序({

句柄:函数(){

console.log('app柄);

}

},3);

var对话框=新的处理程序(应用程序,1);

新的处理程序(对话框,2);

Button.handle();



通过原型特征变化的代码,调用代码button.handle(->对话框。处理)(->应用程序处理)(处理)->参数(),前三个被称为手柄的原型,并最终找到参数的处理,然后输出结果,也就是说只有一层。

在调用时,如何使对话框的对象处理事实上,对话框实例对象的句柄方法可以定义,但需要在新按钮之前完成,代码如下所示:

复制代码代码如下所示:

var =新的处理程序({

句柄:函数(){

console.log('app柄);

}

},3);

var对话框=新的处理程序(应用程序,1);

dialog.handle =函数(){

console.log('dialog之前…)

具体操作/处理在哪里

console.log('dialog后…)

};

新的处理程序(对话框,2);

Button.handle();



代码的执行结果是直接在dialog.handle,而不再是由应用程序传递的参数定义的处理执行。

这件事你做完后可以做吗,然后让继承人继续处理它答案是肯定的,但是在调用句柄之后,您需要调用下面的代码,并带有原型的特性:

复制代码代码如下所示:

handler.prototype.handle.call(本);



这个句子的意思是调用原型的句柄方法继续调用它的继承者(即继承者)的句柄方法。下面的代码如下所示:按钮,应用程序,由三个对象定义的句柄将被执行。

复制代码代码如下所示:

var =新的处理程序({

句柄:函数(){

console.log('app柄);

}

},3);

var对话框=新的处理程序(应用程序,1);

dialog.handle =函数(){

console.log('dialog之前…)

具体操作/处理在哪里

handler.prototype.handle.call(本); / /继续走高

console.log('dialog后…)

};

新的处理程序(对话框,2);

button.handle =函数(){

console.log(按钮之前…)

具体操作/处理在哪里

handler.prototype.handle.call(本);

console.log(按钮后…)

};

Button.handle();



代码的结果我们可以看到,如果你想自己的,然后调用的后继处理,在handler.prototype.handle.call结束(这);的代码,如果你想先处理继承的代码,在开始handler.prototype.handle.call(这)代码。

总结

责任链模式经常与组合模式一起使用,以便组件的父可以用作它的继承者。

同时,DOM事件冒泡机制,这似乎是类似的东西,如点击一个按钮,如果你不停止的气泡,点击事件会冒泡到父元素,利用这个机制也可以处理很多相关的问题,如设计模式在模式元素系列享受1例事件:集中管理的示例代码。