如果我可以编写,为什么我需要使用 CoR if-else
,而不是通过多个处理程序,我可以找到我需要的任何处理程序并将处理委托给特定的处理程序。
我认为,CoR 没有被用作在多个处理程序中处理相同请求的管道(例如:https ://github.com/RichJones22/chainOfResponsibility_cpp/blob/master/main.cpp )。那么我为什么要使用 CoR 呢?
如果我可以编写,为什么我需要使用 CoR if-else
,而不是通过多个处理程序,我可以找到我需要的任何处理程序并将处理委托给特定的处理程序。
我认为,CoR 没有被用作在多个处理程序中处理相同请求的管道(例如:https ://github.com/RichJones22/chainOfResponsibility_cpp/blob/master/main.cpp )。那么我为什么要使用 CoR 呢?
CoR的优势是什么?
你说得对,它是一种管道;管道的每一步都通过基类接口与下一步交互。如果每个管道步骤不直接依赖于/与前面步骤的上下文相关联,则可以使用它。
每个类都将实现自己的管道阶段,优点是:
模块化:每个管道类都处理其定义明确的方面/命令;每个命令对象/管道阶段的代码应该更干净,更易于阅读/维护。
一个优点是您可以单独调试/测试这些类中的每一个,独立于其余的命令/管道类;如果您有单元测试,那就太好了。
您可以在工厂/构建器类中配置不同的管道实例,并将命令类视为构建块,并根据配置/实际要求将它们堆叠起来。
一个例子是记录阶段;您将添加一个仅进行日志记录的派生类并将其添加到管道的末尾,我必须记录一个事件;如果您处于“无日志记录模式配置”中,那么您将不会堆叠此命令对象。
如果您必须在一种情况下执行链中 10 个元素中的 4 个,在另一种情况下执行 2 个,在另一种情况下执行 9 个,那么 CoR 显然比大量嵌套的 if 语句要好。
考虑经典的实现,例如验证器链。您可以在特定情况下插入和拔出一些验证器,您可以在第一次验证错误时失败,或者只是收集所有验证器。