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

回答

3

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

在你的问题护理第二个场景(责任想知道情景链)的条款必须非常注意,因为你已经引入严重的并发症入模式。 handler1如何知道它只采取了部分操作?如果它假定额外的处理程序将执行处理,它将调用额外的处理程序,并且可能没有必要;这将是浪费。但是,您将面临的主要问题将是Single Responsibility Principle。如果多个处理程序(例如Handler的示例Handler1 & Handler)正在查找处理该命令的命令,则意味着对命令的任何更改都可能会影响这两个处理程序。这会引起我的一面红旗,我的责任可能无法正确定义,值得再看一次。总的来说,我怀疑一个班级的变化可能会通过一系列其他班级产生潜在的连锁反应。在这种情况下,我的首选是将执行命令所需的代码提取到处理程序以外的类中,并定义一个处理程序来处理可调用所有提取出的代码的命令。