Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 责任链设计模式和使用简单的if-elseif-else块有什么区别?_Design Patterns_Chain Of Responsibility - Fatal编程技术网

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

Design patterns 责任链设计模式和使用简单的if-elseif-else块有什么区别?,design-patterns,chain-of-responsibility,Design Patterns,Chain Of Responsibility,前几天,我在查阅《责任链》时,遇到了一个例子 基本上,有一个抽象处理程序,然后是具体的处理程序,每个处理程序都实现父抽象处理程序的handle方法。实现是这样的,首先要检查这个特定的处理程序是否能够处理当前的请求,如果不能,则将请求传递给它的后续处理程序 现在,我也可以使用一个简单的if-else条件块来做同样的事情。以上面链接中的第一个示例为例,下面是我将如何更改它: class SingleHandler { if(request > 0 && request

前几天,我在查阅《责任链》时,遇到了一个例子

基本上,有一个抽象处理程序,然后是具体的处理程序,每个处理程序都实现父抽象处理程序的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
    }
}
类单处理器
{

如果(request>0&&request 10&&request 20&&requestYes,您可以重新编写此示例以使用多个if-else级联。但这只是因为它是一个非常简单的示例

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

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

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