2

请人清除了我与这些模式在我脑海中的混乱:在什么情况下,命令链设计模式适用?

  • 指挥链
  • 责任链

我见过很多网站,其中两个是相同的(与责任链相同的命令链的例子)以及其他不在的网站。

这是我了解每个:

CHAIN命令:

一类我们称之为CommandChain,以持有物业“命令”,这是类的实例的一个列表,它实现相同的界面。假设他们都必须实现onCommand(命令,参数)。

CommandChain有addCommand()方法来注册它内的新命令,runCommand()它接受一个命令名及其参数。这个方法应该遍历命令列表,直到其中的一个响应,执行相应的操作并发送正常。责任

正如我在一些网站已经看到了

链,这将是几乎相同的,与此不同: 而不是一类存储命令列表循环的通过,每个命令实例都会存储对下一个命令实例的引用。

那么,这种差异是否足够大以考虑两种设计模式的不同?

它们在哪些实际情况下适用?

回答

2

它们是相同的设计模式。

如果它们具有相同的属性并且只有实现不同,它们在功能上是相同的。这表明这两种设计模式是一样的。

另一个提示是,有对责任DP链维基百科页面,但没有对指挥链。

的“四人帮”是谁写的开创性的书上分别检测点上的行为和属性,而不是实现非常清晰的,明确的设计模式。

+0

他们有相同的行为毕竟,即使第一次一个存储在主类的属性的处理程序,并在第二届每个处理器包含参考下一个。我认为这也可能是决定他们考虑他们不同的模式。 什么样的实现可能会更好,正如我问Atul:在Web开发中通常情况下这种模式是否适用? –

+0

如果处理程序的#趋向于被固定的和已知的在它们被建立时,像第一一个的实现是从性能的角度来看优选的,因为你可以然后分配处理程序作为一个数组。这保存了参考公关的指针。处理程序。至于模式的适用性:许多情况。通常当你想有一些默认行为(链的末尾,一个全部处理程序)和几个“特例”处理程序。 –

0

它看起来像使用命令的那家连锁店时,有一个单独的处理器需要基于一些请求,而在责任链另一方面用于执行多种任务时,每个处理器只能处理一个类型的请求。 一个例子可能是如果有火警,那么你可以向火灾检测器发出一个请求,而不是发出很多命令来检查不同级别或地方的火灾。 虽然谁会像消防员那样对这场火灾作出回应,但是保安,警察等可以通过使用责任链来完成。

+0

这个例子中清除出去,但它是完美知道在网络发展两个模式的一些实际情况。 –

0

的责任链是四人原创设计王刚之一,你可以找到在PHP在这里实现了几个例子:

http://www.php5dp.com/category/design-patterns/chain-of-responsibility/

一个使用该模式一直以“嗅探器”程序用于选择适用于不同设备(手机,平板电脑,台式机)具有多种配置的网站的正确设备。 CoR模式避免了发出请求的客户端和处理对象之间的耦合。

它不是一个层次“处理对象”是不是另一个上方,但在它通过一组选项,直到找到最适合给定的要求是连续的。

“命令链”可以是用于COR用词不当或者它可以是一个完全不同的模式与分级结构。

相关问题