首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >责任链范围

责任链范围
EN

Stack Overflow用户
提问于 2017-05-15 12:00:33
回答 1查看 269关注 0票数 2

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

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

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

代码语言:javascript
运行
复制
"Only one related handler is handling the functionality itself and all the other handlers 
 are just passing through to their supervisor handler."

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

代码语言:javascript
运行
复制
"Every handler has the responsibility to take an action instead and after that passing 
 to supervisor.

作为摘要:

代码语言:javascript
运行
复制
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处理机制适合责任链?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-15 13:35:08

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43979004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档