0

如果我可以编写,为什么我需要使用 CoR if-else,而不是通过多个处理程序,我可以找到我需要的任何处理程序并将处理委托给特定的处理程序。

我认为,CoR 没有被用作在多个处理程序中处理相同请求的管道(例如:https ://github.com/RichJones22/chainOfResponsibility_cpp/blob/master/main.cpp )。那么我为什么要使用 CoR 呢?

4

2 回答 2

1

CoR的优势是什么?

你说得对,它是一种管道;管道的每一步都通过基类接口与下一步交互。如果每个管道步骤不直接依赖于/与前面步骤的上下文相关联,则可以使用它。

每个类都将实现自己的管道阶段,优点是:

  • 模块化:每个管道类都处理其定义明确的方面/命令;每个命令对象/管道阶段的代码应该更干净,更易于阅读/维护。

  • 一个优点是您可以单独调试/测试这些类中的每一个,独立于其余的命令/管道类;如果您有单元测试,那就太好了。

  • 您可以在工厂/构建器类中配置不同的管道实例,并将命令类视为构建块,并根据配置/实际要求将它们堆叠起来。

    一个例子是记录阶段;您将添加一个仅进行日志记录的派生类并将其添加到管道的末尾,我必须记录一个事件;如果您处于“无日志记录模式配置”中,那么您将不会堆叠此命令对象。

于 2015-09-02T13:16:31.637 回答
0

如果您必须在一种情况下执行链中 10 个元素中的 4 个,在另一种情况下执行 2 个,在另一种情况下执行 9 个,那么 CoR 显然比大量嵌套的 if 语句要好。

考虑经典的实现,例如验证器链。您可以在特定情况下插入和拔出一些验证器,您可以在第一次验证错误时失败,或者只是收集所有验证器。

于 2015-09-02T13:07:45.713 回答