前几天我正在查找责任链,我发现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 块提供完全相同的功能,是否有任何具体原因我应该使用责任链?在性能、内存消耗、可维护性、可扩展性方面哪一个更好?
是的,您可以重写此示例以使用多个 if-else 级联。但这只是因为这是一个相当简单的例子。
The 责任链是一种动态模式。这意味着处理程序可以在运行时进行交换。这通常在 UI 代码中完成,其中多个嵌套控件可以代表处理程序。想象一下以下场景:
你有一扇窗户。在这个窗口中有某种面板。在此面板中有一个文本框。您右键单击文本框。执行的命令取决于层次结构。系统将要求第一个处理程序 - 文本框 - 处理点击请求。如果它不知道如何处理请求,则会将其传递给其父级(面板)等。我怀疑您是否想使用 if-else-cascade 来实现这种场景。每次更改 UI 时,都必须更改级联。这就是使用处理程序对象的原因。它使代码可交换和可重用。
许多模式可以通过不同的方式实现。这是没有面向对象的低级编程语言中的常见做法。然而,这些代码通常非常不灵活且难以维护。然而,这就是它们速度快的原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)