【问题标题】:Command Pattern: How does command allows extensible? [duplicate]命令模式:命令如何允许可扩展? [复制]
【发布时间】:2015-12-30 22:49:00
【问题描述】:

我在此链接中阅读了命令模式 Command Design Pattern in Java – Example Tutorial

它说的命令模式

命令模式易于扩展,我们可以在接收器中添加新的操作方法并创建新的命令实现,而无需更改客户端代码。

如果我们添加新命令,客户端代码将如何更改。假设在上面的代码示例中,如果我想添加 DeleteCommand。客户端程序主程序必须正确更改,我的意思是他需要将代码写入客户端代码。

变化词的确切含义是什么?这是否意味着我们不需要更改现有代码但我们可以添加新代码。这就是命令模式可扩展的意思吗?

【问题讨论】:

  • 您必须为新的命令行为编写接口的新实现,但是任何处理接口的客户端都不需要知道有关如何执行命令的详细信息。有什么难理解的?
  • 如果是JAVA教程,你为什么还要把它标记为C#?
  • 问题:客户端代码是否更改?
  • 是的,任何处理接口的客户端都不需要更改。但是在此示例中,客户端创建接收器并设置命令。因此,当我们添加新命令时说“DeleteCommand”客户端需要通过添加新的来更改其代码code.so 作者的意思是“不更改客户端代码”是什么意思。我在 C# bcoz 中添加了我想通过编程极客来查看 thi,而不管语言是什么,因为它是设计逻辑的范例。

标签: java c# design-patterns command-pattern


【解决方案1】:

来自https://en.wikipedia.org/wiki/Command_pattern

我认为这一段在解释模式方面做得更好。比整篇文章。

基本原理/用途:

使用命令对象可以更轻松地构建通用组件 需要一次委托、排序或执行方法调用 他们的选择不需要知道方法的类或 方法参数。

设计:

与命令模式相关的四个术语是命令, 接收者、调用者客户端。命令对象知道接收者 并调用接收者的方法。 参数的值 接收方法存储在命令中。接收器然后执行 工作。调用者对象知道如何执行命令,并且可以选择 对命令执行进行簿记。调用者不 对具体命令一无所知,它只知道命令 界面。一个调用者对象和几个命令对象都被持有 由客户对象。 客户端决定执行哪些命令 哪些点。要执行命令,它将命令对象传递给 调用者对象。

客户端不知道调用者或命令的内部工作原理。这就是它的好处。客户端可以将它们视为“原子”事件,它们可以随时启动(通过将命令传递给接收器)。

例如,如果我有一个电子游戏,我可以有一本魔法书(接收器),一些卷轴(命令),会有一个英雄/女主角作为(客户端),还有魔法小​​鬼(调用者) ) 获取卷轴的内容(命令)并知道如何将其转换为书籍(接收器)的“输入”(参数)


(顺便说一句:我只是做了这个比较,但我更喜欢它......可能会更多地使用它)


这就是为什么链接说可以在不影响客户端代码的情况下更改“接收器”方法的原因。因为客户端不知道命令的详细信息,也不知道接收者的详细信息。 (也不是调用者)。它只有一组“命令”,可以将其分配给接收器方法的选择方式。无需了解任何其他 3 个类的内部构成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2020-09-27
    • 2016-09-07
    • 2015-12-19
    • 2019-06-21
    • 1970-01-01
    相关资源
    最近更新 更多