4

我目前正在学习软件设计课程。我自己从来没有真正擅长设计软件系统,所以我认为这是弥补我的弱点的明智之举;)

我试图了解命令模式是如何工作的。我已经到处寻找例子,但我仍然感到困惑。模式中每个类的职责是什么?ConcreteCommands 是否实际执行操作,或者它们是否携带必要的信息并将其发送到适当的目的地以实际执行?

4

4 回答 4

4

假设你有一张纸,上面有关于某个对象的分步说明。你把这张纸装进一个信封并密封起来。然后你把信封交给你的一个朋友,知道他会在某些事件发生时打开它并按照此处所写的内容进行操作。

在这种情况下,您是Client。这篇论文是一个ConcreteCommandReceiver就是你在论文中提到的对象。Invoker您的朋友。

您可以通过选择Invoker来选择打开信封的条件。

于 2011-03-23T20:32:07.550 回答
1

据我了解,命令模式的本质是为要执行的操作捕获数据(以便它可以在适当的时间执行,而不是立即执行)。现在谁执行该操作并不那么重要。它可能是单独的命令处理程序类,也可能是命令类本身。

于 2011-03-23T19:57:55.107 回答
1

我见过的命令模式有两种不同的变体。

第一个是用于执行任务或命令的简单界面。Runnable Java 接口就是这样一个例子。实现有一个简单的方法,例如“doSomething()”,它允许系统中的另一个组件执行该任务或命令。

命令模式的教科书版本甚至描述了将使用命令具体实现的系统的其他组件。这就是调用者、接收者和客户端等其他术语的来源。有关这方面的更多信息,请参阅 Wikipedia:http ://en.wikipedia.org/wiki/Command_pattern

不要让这种设计模式让您感到困惑,它就像拥有一个带有“doSomething()”定义的接口一样简单。

于 2011-03-23T21:59:35.527 回答
0

科学地说,命令模式是函数式编程领域中闭包的 OO 实现,应该相应地使用。

假设您有按钮控制:当它按下时,应该执行一些操作。这个动作是具体命令。它可以是简单的指向函数的指针(在 C 或 C++ 中)。但是,如果它需要来自其他控件或用户输入的额外信息,它们也应该在某个地方被捕获。出于这个原因,拥有一个可以捕获这些附加信息的对象是很方便的。

作为副作用,您可以将命令存储在某个容器中并延迟它们的执行,或者您可以跟踪执行了哪些命令,或者您可以稍后回滚它们等。

于 2011-03-23T21:13:28.833 回答