责任范围链

Chain of Responsibility Scope

您好,我想知道责任链范围。

一般来说,这是一种常用的模式,它本身有处理程序,每个处理程序都将功能操作传递给它的主管。

我在示例场景中看到的是:

"Only one related handler is handling the functionality itself and all the other handlers 
 are just passing through to their supervisor handler."

在这种情况下是否违反了责任链模式:

"Every handler has the responsibility to take an action instead and after that passing 
 to supervisor.

作为摘要:

Chain of Responsibility Recommended Scenario:
Handler1(Take No Action) --> Handler2 (Take No Action) --> Handler3(Take All Action)

Chain of Responsibility Wondering Scenario:
Handler1(Take Partial Action) --> Handler2(Take No Action) --> Handler(Take Partial Action)

第二种情况适合还是违反责任链?

例如,Netty 本身有处理程序,并且都有自己负责的操作,并且它们还在它们之间传递信息。能说Netty handler机制适合责任链吗?

一般来说,责任链涉及您在问题中给出的推荐场景。也就是说,给定一个 'command' 对象实例从链中的一个处理程序传递到下一个处理程序,直到处理程序处理命令并完成。

就您问题中的第二种情况(责任链疑惑情况)而言,必须小心,因为您在模式中引入了严重的并发症。 handler1 如何知道它只采取了部分行动?如果它假定其他处理程序将进行处理,它将调用其他处理程序并且可能没有必要;这会很浪费。但是,您将面临的主要问题是 Single Responsibility Principle。如果多个处理程序(在您的示例 Handler1 和 Handler 的情况下)正在寻找要处理的命令,这意味着对命令的任何更改都可能影响两个处理程序。这会给我一个危险信号,我的职责可能没有正确定义,值得再看一眼。总的来说,我怀疑其中一个 class 的变化会通过一系列其他 class 产生潜在的连锁反应。在这种情况下,我的偏好是将执行命令所需的代码提取到处理程序以外的 classes 中,并定义一个处理程序来处理可以调用​​所有提取代码的命令。