命令模式:命令如何允许可扩展?

时间:2015-12-30 22:49:01

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

我在这个链接中读取命令模式 Command Design Pattern in Java – Example Tutorial

它说的命令模式

  

命令模式很容易扩展,我们可以在接收器中添加新的操作方法,并在不更改客户端代码的情况下创建新的Command实现。

如果我们添加新命令,客户端代码必须如何更改。如果我想添加DeleteCommand,请参阅上面的代码示例。客户端程序main必须改正,我的意思是他需要代码到客户端代码。

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

1 个答案:

答案 0 :(得分:0)

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

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

<强>理由/用途:

  

使用命令对象可以更轻松地构建常规组件   需要委托,排序或执行方法调用的时间   他们的选择无需了解方法的类别或   方法参数。

<强>设计

  

与命令模式始终相关的四个术语是命令,   接收者,调用者客户端。命令对象知道接收器   并调用接收器的方法。 参数的值   接收方法存储在命令中。然后接收器做了   工作。调用者对象知道如何执行命令,并且可选   关于命令执行的簿记。调用者没有   知道关于具体命令的任何事情,它只知道命令   接口。调用对象和几个命令对象都被保存   由客户端对象。 客户端决定执行哪些命令   哪个点。要执行命令,它会将命令对象传递给   调用者对象。

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

所以,例如,如果我有一个视频游戏,我可以有一本魔法书(接收器),一些卷轴(命令),将有一个英雄/女主角(将成为(客户端))和魔法imp(调用者) )获取滚动的内容(命令)并知道如何将其转换为书籍(接收者)的输入&#39;(参数)

(旁白:我刚刚做了那个比较,但我更喜欢它......可能会更多地使用它)

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