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方法?当需要一些额外的逻辑来决定何时执行命令时,调用程序类将用于保留附加逻辑,客户端将与调用程序对象交互以执行命令?

命令模式的目的通常是1)使一组不同的操作共享相同的类型,以便它们可以由相同的代码处理2)将操作编组/创建与操作调用分开。明确要求接收器用于目的2

如果您在创建之后立即调用,或者如果接收者正在扮演调用者的角色,那么就没有单一目的、独立的调用者。这是否意味着没有调用者真的是一个哲学问题:)

这样看:您/可以/分离创建、调度和调用。这并不意味着您必须将它们实现为三个独立的类。命令模式生命周期中涉及的只是逻辑角色


编辑:我猜单一责任原则认为应该将它们分开,但有一点是共通的:)可以而且应该遵守局部条件。

正如我们所知,java.lang.Runnable是命令模式的一个示例,其中线程类充当调用器。我们将可运行类的对象传递给Thread类,并称之为start/run

但是我们从来没有创建一个可以调用主线程的客户机类

因此,调用程序不是可选的,但它与客户端没有紧密耦合。所以命令模式的UML从来没有显示客户机类和调用器类之间的任何关系

另一个与此问题相关。

可能重复的