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
Design patterns 命令模式是单个实例的命令模式_Design Patterns_Command Pattern - Fatal编程技术网

Design patterns 命令模式是单个实例的命令模式

Design patterns 命令模式是单个实例的命令模式,design-patterns,command-pattern,Design Patterns,Command Pattern,命令模式的定义是否说明命令是否应该可重用。我的意思是,您应该在每次调用execute方法时创建一个新实例,还是可以创建一个命令实例并使用不同的参数多次调用execute 在.net平台上,我可以看到WPF中的命令只创建了一次,尽管这不是答案 也许从另一个角度来看,这是一个不允许保存状态的命令,比如ddd服务,如果是这样的话,使用一个实例就可以了 如果这不是模式定义的一部分,是否存在任何“最佳实践”?GoF模式中的命令对象肯定是可重用的。最常见的重用情况是在支持撤消操作的命令中。调用程序可以调用e

命令模式的定义是否说明命令是否应该可重用。我的意思是,您应该在每次调用execute方法时创建一个新实例,还是可以创建一个命令实例并使用不同的参数多次调用execute

在.net平台上,我可以看到WPF中的命令只创建了一次,尽管这不是答案

也许从另一个角度来看,这是一个不允许保存状态的命令,比如ddd服务,如果是这样的话,使用一个实例就可以了


如果这不是模式定义的一部分,是否存在任何“最佳实践”?

GoF模式中的命令对象肯定是可重用的。最常见的重用情况是在支持撤消操作的命令中。调用程序可以调用
execute()
执行操作,然后调用
undo()
回滚该操作。调用程序可以任意执行()和撤消()无数次

调用程序不知道命令如何执行,包括执行(或撤消)所需的任何参数,这对于模式来说是至关重要的。参数必须封装在命令对象中,这意味着它们可以在命令实例化时传递,但不能在执行时传递

显然,调用程序永远不会实例化命令本身,因为关键是通过提供一个只起作用的黑盒,将调用程序与执行细节分离。有关该主题的更多信息,请参见:

是否每次要调用execute方法时都要创建一个新实例

不,只有在希望使用不同参数调用
execute()
方法时,才应该创建新实例。命令将这些参数作为其状态保存,以便调用程序不必知道它们


把它想象成点击一个按钮。您不必向按钮传递参数。该按钮执行的操作可能在UI后面有参数,但您不需要传递任何信息来单击该按钮。你是调用者。按钮是命令。创建按钮并通过某些操作对其进行参数化的UI是客户端。客户机通过命令界面将调用程序与操作分离。

对此进行了更多搜索。我想这就是答案。它归结为我希望命令具有的范围。在我的例子中,我有3个作用域:单例、瞬态和作用域。所有这些都是有效的,可以工作。如何做出最佳选择?这是我下一个要弄清楚的任务。不幸的是,该线程中的答案是错误的,这并不是说你不应该使用它;但这不是GoF命令模式。我提出了一个副本,在那里我解释了这一点,现在在答案本身添加了一条评论。