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

Command pattern is the command a single instance

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

在 .net 平台上,我可以看到 WPF 中的命令只创建一次,但不确定是否是答案。

也许另一种看待它的方式是不允许保持状态的命令,如 ddd 服务,如果有单个实例就可以了。

如果这不是模式定义的一部分,是否存在 "best practices"?

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

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

很明显,Invoker 永远不会实例化 Command 本身,因为重点是通过提供一个可以正常工作的黑盒来将 Invoker 与执行细节分离。更多关于该主题的信息:.

are you supposed to create a new instance every time you want to call the execute-method

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

把它想象成点击一个按钮。您不必将参数传递给按钮。该按钮执行的操作可能在 UI 后面有参数,但您没有传递任何内容来单击该按钮。你是祈求者。按钮是命令。创建按钮并通过某些操作对其进行参数化的 UI 是客户端。 Client 通过 Command 接口将 Invoker 与 action 分离。