首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在什么情况下,命令链设计模式是适用的?

在什么情况下,命令链设计模式是适用的?
EN

Stack Overflow用户
提问于 2012-10-03 09:07:03
回答 3查看 4.7K关注 0票数 2

请有人用这些模式把我脑子里的烂摊子清理干净:

  • 命令链
  • 责任链

我看到了两个相同的站点(指挥链与责任链相同的例子),以及其他不一样的站点。

这就是我对每一个人的理解:

命令链:

一个类让我们称它为CommandChain,其中一个属性包含一个“命令”列表,这些命令是实现相同接口的类的实例。假设它们都必须实现onCommand(命令、参数)。

CommandChain有addCommand()方法在其中注册新命令,runCommand()接受命令名及其参数。该方法应该循环遍历命令列表,直到其中一个命令响应,执行相应的操作,并发送ok。

责任链

正如我在某些站点中看到的那样,这与其他站点的情况大致相同:每个命令实例将存储一个对下一个命令实例的引用,而不是让一个类存储要循环的命令列表。

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-04 07:51:17

它们是相同的设计模式。

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

另一个提示是,维基百科有一个负责链DP的页面,但没有一个用于命令链。

写了一本关于DPs的开创性书的“四人帮”非常清楚地定义了一种设计模式,而不是实现。

票数 6
EN

Stack Overflow用户

发布于 2012-10-03 12:41:52

看起来,当有一个处理程序需要根据某个请求执行多个任务时,就会使用命令链;而另一方面,当每个处理程序只能处理一种类型的请求时,就会使用责任链。举个例子,如果有火灾警报,你可以向火灾探测器发出请求,它会发出许多命令来检查不同级别或地点的火灾。而谁来应对这场火灾,如消防看守人、保安、警察等,都可以通过责任链来完成。

票数 1
EN

Stack Overflow用户

发布于 2014-07-30 10:16:40

“责任链”是“四人帮”最初的设计之一,您可以在这里找到几个用PHP实现的示例:

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

这种模式的一种用法是使用“嗅探器”程序来选择适合不同设备(电话、平板电脑、桌面)的多种配置的网站使用的正确设备。CoR模式避免了客户端发出请求和处理对象之间的耦合。

它不是层次结构,因为一个“处理对象”不高于另一个对象,但它是顺序的,因为它经过一组选项,直到找到对给定请求最合适的选项。

“命令链”可能是CoR的用词不当,也可能是具有层次结构的完全不同的模式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12705195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档