Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.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
Java 在命令设计模式的上下文中,客户端只是程序的主要部分吗?_Java_Design Patterns_Command Pattern - Fatal编程技术网

Java 在命令设计模式的上下文中,客户端只是程序的主要部分吗?

Java 在命令设计模式的上下文中,客户端只是程序的主要部分吗?,java,design-patterns,command-pattern,Java,Design Patterns,Command Pattern,我正在开发我的第一个大型程序,它将实现我一直在研究的许多设计模式。我的程序的一部分是带有按钮的用户界面,我使用命令模式将命令绑定到这些按钮。我对“客户”感到困惑。它只是你程序中的主要部分吗 我的看法是:命令模式中有两个重要的概念实体,一个可能被忽略了: 最重要的是,客户希望事情发生。命令对象因客户端而存在。客户希望在他们的帮助下有所成就 调用程序,一个相当愚蠢的对象,只知道如何按下简单的按钮(=使用命令界面的方法)。不需要知道任何关于其他实体的信息,也不需要知道这些命令的实际作用。它需要关心的

我正在开发我的第一个大型程序,它将实现我一直在研究的许多设计模式。我的程序的一部分是带有按钮的用户界面,我使用命令模式将命令绑定到这些按钮。我对“客户”感到困惑。它只是你程序中的主要部分吗

我的看法是:命令模式中有两个重要的概念实体,一个可能被忽略了:

  • 最重要的是,客户希望事情发生。命令对象因客户端而存在。客户希望在他们的帮助下有所成就

  • 调用程序,一个相当愚蠢的对象,只知道如何按下简单的按钮(=使用命令界面的方法)。不需要知道任何关于其他实体的信息,也不需要知道这些命令的实际作用。它需要关心的是,当给它一个按钮时,它必须按下那个按钮。(在您的例子中:gui框架,即当人类按下gui按钮时,“按下”onAction()或wheever方法-“按钮”)

  • 接受者。有点让整个图像膨胀:如果一个命令包含一个方法调用,那么显然有一个对象接收这个方法调用。但是没有理由把接受者包括在图片中

您在程序中定义的“客户机”基本上取决于您。希望命令存在的东西。命令适用于客户端

我真的不知道在你的案子里到底什么是客户。由于您使用命令作为回调,这些命令的接收者可能也是客户机。这是一个希望获得有关按钮按下的信息以便其行动的地方


客户机可以是很多东西,一个简单的方法或者一个完整的数千个类抽象层。甚至可能是未建模为类的实体。就像您作为程序员一样。

在您的场景中,情况可能是这样,但对于整个命令模式来说,情况并非如此。它可能是另一个程序或网络接口。重要的是,客户机想要搞乱您的类,而命令模式将确保一切都是集中的

客户机以许多设计模式呈现,而不仅仅是命令模式。这是一张来自以下方面的图表:

通常,客户是设计中希望从设计模式的应用中获益的部分。受保护的变体的工作原理类似于插件方案。也就是说,您可以对打开的部件进行更改,而客户端不会受到影响,因为它只直接依赖于关闭的部件


您可以在命令模式中说,如果添加新命令(类似于插件),客户端将不需要(大量)更改

请添加有关“客户端”的更多详细信息。您使用哪个引用作为命令模式?