你好,我想知道责任链的范围。
一般来说,它是一种常用的模式,它本身有处理程序,每个处理程序都将功能操作传递给它的主管。
我在示例场景中看到的是:
"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处理机制适合责任链?
发布于 2017-05-15 13:35:08
一般来说,责任链涉及您在问题中建议的场景。也就是说,给定一个“命令”对象实例从一个处理程序传递到链中的下一个处理程序,直到处理程序处理完该命令并完成。
在第二个场景中(责任链,奇怪场景),在您的问题中必须小心,因为您已经在模式中引入了严重的复杂因素。handler1如何知道它只采取了部分行动?如果它假定额外的处理程序将进行处理,那么它将调用额外的处理程序,并且可能没有必要;这将是浪费。然而,您将面临的主要问题将是单一责任原则。如果多个处理程序(在您的示例中是Handler1 & Handler)正在寻找要处理的命令,这意味着对命令的任何更改都可能会影响这两个处理程序。这会向我发出一个危险的信号,我的责任可能没有得到适当的界定,值得重新审视。一般说来,我怀疑某一类别的变化会对其他一系列课程产生潜在的连锁反应。在这种情况下,我倾向于将执行命令所需的代码提取到处理程序以外的类中,并定义一个处理程序来处理可以调用所有提取出来的代码的命令。
https://stackoverflow.com/questions/43979004
复制相似问题