责任链
Chain of Responsibility
如果我可以编写 if-else
为什么我需要使用 CoR 而不是通过多个处理程序我可以找到我需要的任何处理程序并将处理委托给特定的处理程序。
我认为,CoR 没有被用作在多个处理程序中处理相同请求的管道(像这样:https://github.com/RichJones22/chainOfResponsibility_cpp/blob/master/main.cpp)。那我为什么要使用 CoR?
如果在一种情况下您必须执行链中 10 个元素中的 4 个,在其他情况下执行 2 个元素,在另一种情况下执行 9 个元素,那么 CoR 显然优于大量嵌套 if 语句。
考虑经典实现,例如验证器链。您可以在特定情况下插入和取出一些验证器,您可以在第一次验证错误时失败,或者只收集所有验证器。
CoR有什么优势?
你是对的,它是一种管道;管道的每一步都通过基础 class 接口与下一步交互。如果每个管道步骤不依赖于 on/are 直接与前面步骤的上下文相关联,则可以使用它。
每个 class 将实现自己的管道阶段,优点是:
模块化:每个管道 class 对待其明确定义的 aspect/command;每个命令 object/pipeline 阶段的代码应该更清晰,更容易 read/maintain.
一个优点是您可以 debug/test 每个 class 独立于其余 command/pipeline class;如果您有单元测试,那就太好了。
您可以在 factory/builder class 中配置不同的管道实例,并将命令 class 视为构建块并根据 configuration/actual 要求。
一个例子是日志记录阶段;您将添加一个派生的 class,它只进行日志记录并将其添加到管道的末尾,我必须记录一个事件;如果你在一个'no logging mode configuration'那么你将不会堆叠这个命令对象。
如果我可以编写 if-else
为什么我需要使用 CoR 而不是通过多个处理程序我可以找到我需要的任何处理程序并将处理委托给特定的处理程序。
我认为,CoR 没有被用作在多个处理程序中处理相同请求的管道(像这样:https://github.com/RichJones22/chainOfResponsibility_cpp/blob/master/main.cpp)。那我为什么要使用 CoR?
如果在一种情况下您必须执行链中 10 个元素中的 4 个,在其他情况下执行 2 个元素,在另一种情况下执行 9 个元素,那么 CoR 显然优于大量嵌套 if 语句。
考虑经典实现,例如验证器链。您可以在特定情况下插入和取出一些验证器,您可以在第一次验证错误时失败,或者只收集所有验证器。
CoR有什么优势?
你是对的,它是一种管道;管道的每一步都通过基础 class 接口与下一步交互。如果每个管道步骤不依赖于 on/are 直接与前面步骤的上下文相关联,则可以使用它。
每个 class 将实现自己的管道阶段,优点是:
模块化:每个管道 class 对待其明确定义的 aspect/command;每个命令 object/pipeline 阶段的代码应该更清晰,更容易 read/maintain.
一个优点是您可以 debug/test 每个 class 独立于其余 command/pipeline class;如果您有单元测试,那就太好了。
您可以在 factory/builder class 中配置不同的管道实例,并将命令 class 视为构建块并根据 configuration/actual 要求。
一个例子是日志记录阶段;您将添加一个派生的 class,它只进行日志记录并将其添加到管道的末尾,我必须记录一个事件;如果你在一个'no logging mode configuration'那么你将不会堆叠这个命令对象。