2

嗨,我想知道责任链范围。

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

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

"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 处理程序机制适合责任链吗?

4

1 回答 1

3

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

就您的问题中的第二个场景(责任链疑惑场景)而言,必须小心谨慎,因为您已经在该模式中引入了严重的复杂性。handler1 怎么知道它只采取了部分行动?如果它假定额外的处理程序将进行处理,它将调用额外的处理程序并且可能没有必要;这将是浪费。您将面临的主要问题将是单一职责原则然而。如果多个处理程序(在您的示例 Handler1 和处理程序的情况下)正在寻找要处理的命令,这意味着对命令的任何更改都可能影响两个处理程序。这会给我带来一个危险信号,我的职责可能没有被正确定义,值得重新审视。一般来说,我怀疑一个类的变化会通过一系列其他类产生潜在的连锁反应。在这种情况下,我的偏好是将执行命令所需的代码提取到处理程序以外的类中,并定义一个处理程序来处理可以调用​​所有提取出的代码的命令。

于 2017-05-15T13:35:08.703 回答