【问题标题】:What is the difference between Chain Of Responsibility design pattern and using a simple if-elseif-else block?责任链设计模式和使用简单的 if-elseif-else 块有什么区别?
【发布时间】:2014-05-22 09:38:27
【问题描述】:

前几天我只是在查找责任链,我遇到了this 示例。

基本上有一个抽象处理程序,然后是具体的处理程序,每个处理程序都实现了父抽象处理程序的handle方法。实现是这样的,首先检查该特定处理程序是否可以处理当前请求,如果不能,则将请求传递给其后继者。

现在,我也可以使用简单的 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 块提供完全相同的功能,我是否应该使用责任链?在性能、内存消耗、可维护性、可扩展性方面,哪一个更好?

【问题讨论】:

    标签: design-patterns chain-of-responsibility


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-24
      • 2021-11-28
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 2011-04-11
      相关资源
      最近更新 更多