责任链设计模式和使用简单的if-elseif-else块有什么区别?

10

前几天我查找了职责链模式,然后发现了这个例子。

基本上,有一个抽象处理器和具体的处理器,每个具体处理器都实现了父抽象处理器的处理方法。其实现方式是首先检查这个特定处理器是否能够处理当前请求,如果不能,则将请求传递给它的后继者。

现在,我也可以使用简单的 if-else 条件块来做同样的事情。以上面链接中的第一个示例为例,以下是我会如何更改:

class SingleHandler
{
    if(request > 0 && request <= 10)
    {
        // Process request
    }
    else if(request > 10 && request <= 20)
    {
        // Process request differently
    }
    else if(request > 20 && request <= 30)
    {
        // Process request differently
    }
}
现在,我的问题是,这两者之间的根本区别是什么?如果我可以使用 if-else 块提供完全相同的功能,是否应该使用责任链?就性能、内存消耗、可维护性和可伸缩性而言,哪一个更好?
1个回答

16

是的,您可以重写此示例以使用多个 if-else 级联。但这仅因为它是一个相当简单的示例。

责任链是一种动态模式。这意味着处理程序可以在运行时交换。这通常在 UI 代码中完成,其中几个嵌套控件可以表示处理程序。想象以下场景:

您有一个窗口,在该窗口中有某种面板。在此面板中有一个文本框。您右键单击文本框。执行的命令取决于层次结构。系统将询问第一个处理程序-文本框-处理单击请求。如果它不知道如何处理请求,则将其传递给其父项-面板-等。我怀疑您不希望使用 if-else 级联来实现这种场景。每次更改 UI 时,都必须更改级联。这就是为什么使用处理程序对象。它使代码可交换和可重用。

许多模式可以以不同的方式实现。这是低级编程语言没有面向对象时的常规做法。然而,这些代码通常相当不灵活且难以维护。然而,这就是使它们快速的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接