请有人用这些模式把我脑子里的烂摊子清理干净:
我看到了两个相同的站点(指挥链与责任链相同的例子),以及其他不一样的站点。
这就是我对每一个人的理解:
命令链:
一个类让我们称它为CommandChain,其中一个属性包含一个“命令”列表,这些命令是实现相同接口的类的实例。假设它们都必须实现onCommand(命令、参数)。
CommandChain有addCommand()方法在其中注册新命令,runCommand()接受命令名及其参数。该方法应该循环遍历命令列表,直到其中一个命令响应,执行相应的操作,并发送ok。
责任链
正如我在某些站点中看到的那样,这与其他站点的情况大致相同:每个命令实例将存储一个对下一个命令实例的引用,而不是让一个类存储要循环的命令列表。
那么,这种差异是否足以考虑这两种设计模式的不同呢?
它们在哪些实际情况下适用?
发布于 2012-10-04 07:51:17
它们是相同的设计模式。
如果它们具有相同的属性,并且只有实现不同,那么它们在功能上是相同的。这表明这两种设计模式是同一的。
另一个提示是,维基百科有一个负责链DP的页面,但没有一个用于命令链。
写了一本关于DPs的开创性书的“四人帮”非常清楚地定义了一种设计模式,而不是实现。
发布于 2012-10-03 12:41:52
看起来,当有一个处理程序需要根据某个请求执行多个任务时,就会使用命令链;而另一方面,当每个处理程序只能处理一种类型的请求时,就会使用责任链。举个例子,如果有火灾警报,你可以向火灾探测器发出请求,它会发出许多命令来检查不同级别或地点的火灾。而谁来应对这场火灾,如消防看守人、保安、警察等,都可以通过责任链来完成。
发布于 2014-07-30 10:16:40
“责任链”是“四人帮”最初的设计之一,您可以在这里找到几个用PHP实现的示例:
http://www.php5dp.com/category/design-patterns/chain-of-responsibility/
这种模式的一种用法是使用“嗅探器”程序来选择适合不同设备(电话、平板电脑、桌面)的多种配置的网站使用的正确设备。CoR模式避免了客户端发出请求和处理对象之间的耦合。
它不是层次结构,因为一个“处理对象”不高于另一个对象,但它是顺序的,因为它经过一组选项,直到找到对给定请求最合适的选项。
“命令链”可能是CoR的用词不当,也可能是具有层次结构的完全不同的模式。
https://stackoverflow.com/questions/12705195
复制相似问题