【问题标题】:Can the chain of responsibility have multiple nodes modify the request?责任链可以有多个节点修改请求吗?
【发布时间】:2012-11-12 19:02:37
【问题描述】:

如果我有多个需要修改请求的节点,是否仍然使用“责任链”设计模式是个好主意?还是应该只在只有一个(未知)节点专门处理请求时才使用这种模式?

IE:节点 2 和节点 3 都需要影响请求 (R)。所以即使节点 2 处理了请求,我仍然想继续将请求沿着列表传递给下一个处理程序

                    +--------+ (R)  +--------+ (R)  +--------+ (R)
Client Request (R)  | Node 1 |----->| Node 2 |----->| Node 3 |----->etc...
                    +--------+      +--------+      +--------+

【问题讨论】:

  • 嗯?你想用这个设计在 php 中做什么?
  • @Neal 在 *nix 系统上的 PHP 站点中,我必须创建一个模块,该模块需要验证目录树的权限和用户/组设置。因此,对于树中的每个请求,我需要通过这个链向下发送它,节点 1 可能会验证请求是否是目录并检查是否设置了正确的权限,节点 2 可能会检查请求是否是文件并验证权限.但是每个请求还需要验证每个请求的用户/组集。但你是对的 - 我不需要将这个问题标记为 PHP(习惯)

标签: algorithm design-patterns chain-of-responsibility


【解决方案1】:

在我看来,您最好使用pipes and filters 模式,因为每个步骤都会添加某种转换和/或验证。

此图片取自上述类似

在任何时候,其中一个过滤器都可以决定处理请求而不将其传递给下一个过滤器。在上面的示例中,(如果是 http 请求),未经身份验证的请求将导致 401 http 状态代码。

【讨论】:

  • 这不就是责任链吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
相关资源
最近更新 更多