Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 对命令模式感到困惑_Design Patterns_Software Design_Command Pattern - Fatal编程技术网

Design patterns 对命令模式感到困惑

Design patterns 对命令模式感到困惑,design-patterns,software-design,command-pattern,Design Patterns,Software Design,Command Pattern,我目前正在学习软件设计课程。我本人从未真正擅长设计软件系统,因此我认为这是弥补我弱点的明智之举;) 我试图理解命令模式是如何工作的。我到处寻找例子,但我仍然感到困惑。模式中每个类的职责是什么?具体命令是否实际执行操作,或者它们是否携带必要的信息并将其发送到适当的目的地以实际执行 据我所知,命令模式的本质是为要执行的操作捕获数据(以便可以在适当的时间执行,而不是立即执行)。现在谁来执行这一行动并不那么重要。它可能是单独的命令处理程序类,也可能是命令类本身。假设您有一张纸,上面有关于某个对象的逐步说

我目前正在学习软件设计课程。我本人从未真正擅长设计软件系统,因此我认为这是弥补我弱点的明智之举;)


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

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

假设您有一张纸,上面有关于某个对象的逐步说明。你把这张纸放进信封里并封好。然后你把信封交给你的一个朋友,知道他会打开信封,并在发生事件时按照这里写的做

在这种情况下,您是客户。该文件是一个具体命令接收器就是你在论文中提到的对象。调用者是你的朋友


您可以通过选择调用程序来选择打开信封的条件。科学地说,命令模式是函数式编程中闭包的OO实现,应该相应地使用

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


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

我已经看到了命令模式的两种不同变体

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

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


不要让这种设计模式迷惑你,它就像有一个带有“doSomething()”定义的界面一样简单。

“…应该相应地使用”--你能解释一下这个词的含义吗?首先查看维基()谢谢!因此,可以肯定的是,调用程序通常可以完成concrete命令告诉它要做的工作(例如设置变量或打印文本)。最后一个问题-只能有一个调用程序,还是可以有不同的调用程序?非常感谢。祝你好运!谢谢你+1:)