Chain Of Responsibility设计模式和使用简单的if-elseif-else块有什么区别?

Bhu*_*hah 8 design-patterns chain-of-responsibility

我前几天只是查找责任链,我遇到了这个例子.

基本上,有一个抽象处理程序,然后是具体的处理程序,每个处理程序都实现父抽象处理程序的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
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是,两者之间的根本区别是什么?如果我可以使用if-else块提供完全相同的功能,是否有任何具体原因我应该使用Chain of Responsibility?在性能,内存消耗,可维护性和可伸缩性方面哪个更好?

Nic*_*ler 15

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

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

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

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