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