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_Uml - Fatal编程技术网

Design patterns 命令模式:客户端和调用程序之间的关系

Design patterns 命令模式:客户端和调用程序之间的关系,design-patterns,uml,Design Patterns,Uml,我正在研究设计模式,我有一个关于命令模式的问题:我不明白为什么我看到的每个类图(例如,看这个:或者)都没有显示客户机和调用程序之间的关系,因为客户机创建了调用程序类的实例 提前谢谢 编辑: 有人能举一个简单的例子,说明如何实现一个不实例化调用程序但只负责处理具体命令和接收者的客户端吗?这是因为可能存在关系,但不一定存在关系 例如: 首先,我们有一个命令界面 public interface Command { void execute(); } 有了一些暗示 public class

我正在研究设计模式,我有一个关于命令模式的问题:我不明白为什么我看到的每个类图(例如,看这个:或者)都没有显示客户机和调用程序之间的关系,因为客户机创建了调用程序类的实例

提前谢谢

编辑:
有人能举一个简单的例子,说明如何实现一个不实例化调用程序但只负责处理具体命令和接收者的客户端吗?

这是因为可能存在关系,但不一定存在关系

例如:

首先,我们有一个
命令
界面

public interface Command {
    void execute();
}
有了一些暗示

public class CopyFilesCommand implements Command {

    @Override
    public void execute() {
        // copy some files
    }
}

public class ZipFilesCommand implements Command {

    @Override
    public void execute() {
        // collect the copied files to a zip archive
    }
}

public class MailZipFileCommand implements Command {

    @Override
    public void execute() {
        // mail the zip file to some address
    }
}
现在设想一个具有基本配置的服务器应用程序

public class Config {
    private static final Config INSTANCE = new Config();

    private List<Command> commands = new ArrayList<>();

    private Config() {
        // intentionally empty
    }

    public static List<Command> getCommands() {
        return Collections.unmodifiableList(INSTANCE.commands);
    }

    public static void addCommand(Command command) {
        INSTANCE.commands.add(command);
    }
}
在我们的服务器应用程序中运行的一些服务可以接受这些命令并调用它们

public class Invoker implements Runnable {

    @Override
    public void run() {
        for (Command command : Config.getCommands()) {
            command.execute();
        }
    }
}

您可以看到,客户机和调用程序彼此不认识(即,他们没有关系),但仍然使用他们都知道的命令一起工作。

这个问题似乎离题了,因为它应该是关于我仍然有点困惑的问题。我无法想象客户端不负责创建和使用Invoker类实例的场景。可能我不理解你的例子。我已经整合了我的评论。在完成之前我按了回车键。
public class Invoker implements Runnable {

    @Override
    public void run() {
        for (Command command : Config.getCommands()) {
            command.execute();
        }
    }
}