Pra*_*Nvs 2 design-patterns chain-of-responsibility
在“责任链(COR)”模式中,我们创建了一个处理程序链。将请求传递给链中的第一个。它试图处理它。如果不能,它将请求转发到链中的下一个,依此类推。例如。Handler1 = new ConcreteHandler1(); handler1.handle
public class ConcreteHandler1
public void handle() {
if(can handle)
handle the request
else
concreteHandler2.handle();
}
Run Code Online (Sandbox Code Playgroud)
我们不能简单地创建一个处理程序列表并在 for 循环中完成相同的操作吗?
for(Handler handler : handlers) {
if(handler can handle the request)
handle
}
Run Code Online (Sandbox Code Playgroud)
我们将以与创建链相同的方式创建处理程序列表。
我知道已经有一篇关于此的帖子- 责任链与类列表的优势是什么?但这并不能澄清我的疑虑。
该链以递归方式组织,以便处理程序可以:
递归只是安排所有这些的最简单和最直接的方法。要在没有递归的情况下允许类似的功能将需要更多的回调和更复杂的处理程序生命周期。
当处理程序不产生任何输出时,如 HTML 事件处理程序,在之前和之后的工作都是不必要的。在这些情况下,通常按照您的建议迭代调用事件处理程序。