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

责任链模式
EN

Stack Overflow用户
提问于 2012-02-08 22:08:39
回答 6查看 3.5K关注 0票数 5

有人能简单地解释一下责任链模式吗?我觉得这篇维基文章有点令人困惑。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-02-08 22:15:02

一个非常好的例子是java servlet filters -在HTTP请求到达其目标之前执行的代码片段。

  • 链包含多个实例,每个实例执行不同的操作,链中的每个实例都可以选择传播到下一个实例,或停止

因此,使用servlet筛选器,您可以

  • 检查用户是否经过身份验证的筛选器。如果是,则筛选器传播到下一个筛选器
  • 下一个筛选器检查用户是否具有对当前资源的权限。如果是,它将传播到下一个
  • 下一个记录当前请求的URL和用户名,并始终传播到下一个
  • 链中没有其他内容,因此最终调用目标对象为
票数 13
EN

Stack Overflow用户

发布于 2012-02-08 22:30:05

我将借助一个类比来尝试:

将命令作为曲棍球进行处理,将责任处理程序类链视为具有单孔的网。现在想象这样一个半径不同的网彼此堆叠在一起(上面有最小半径孔的网)。

现在你把冰球从上面扔下来。如果冰球的半径大于第一个洞,它就会卡在里面,不会再往下掉。这意味着该命令已由第一个处理程序处理。

但是如果冰球比这个洞小,它就会穿过它去下一个洞,以此类推,直到它被抓住或掉进所有的网中。冰球经过的所有网络(责任处理程序类)都已经处理了冰球(处理了命令)。

票数 4
EN

Stack Overflow用户

发布于 2012-02-08 22:21:07

使用此模式,您可以创建一个检查请求的对象链。依次检查请求并处理它,或者将它传递给链中的下一个对象。

好处

  • 将请求的发送者与其receivers
  • simplifies对象解耦,因为它不必知道链结构并保持对其成员的引用
  • 允许通过更改chain

的顺序或成员来动态添加或移除责任

缺点

未保证请求的

  • 执行,如果没有对象对其进行处理,则该请求可能会脱离链
  • 运行时特征很难观察和调试

潜在用例

  • 鼠标点击和键盘events.
  • email.例如,接收电子邮件并将其传递给第一个处理程序,即垃圾邮件处理程序。然后,它要么被处理,要么被传递给第二个处理程序,等等。

发自:

下面是关于此模式的一个有趣的InformIT article,并带有示例代码。

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

https://stackoverflow.com/questions/9194922

复制
相关文章

相似问题

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