0

首先,如果这是一个愚蠢的问题,我深表歉意。这最近一直困扰着我,我认为值得一问......

我有一个应用程序,其中类的流动如下:

在此处输入图像描述

我目前正试图让我的 Client 类和 Server 类能够访问在 MyApp 的 main 中创建的彼此的实例。问题是实例是在 main 中创建的(从而使它们成为静态的),我想知道如何正确地将它们传递给其他类,因为我所做的似乎不是正确的方法。

这是我所做的:

public class MyApp {
    private static RedClient red_client = null;
    private static BlueClient blue_client = null;
    private static RedServer red_server = null;
    private static BlueServer blue_server = null;

    public static void main(String[] args) {
        final Client myClient = new Client(arg1, arg2);
        red_client = myClient.getRedClient();
        blue_client = myClient.getBlueClient();

        final Server myServer = new Server(arg3, arg4);
        red_server = myServer.getRedServer();
        blue_server = myServer.getBlueServer();
    }

    public static RedClient getRedClient() {
        return red_Client;
    }

    public static BlueClient getBlueClient() {
        return blue_client;
    }

    public static RedServer getRedServer() {
        return red_server;
    }

    public static BlueServer getBlueServer() {
        return blue_server;
    }

}

我稍后会像这样使用以下内容:

public class Client {
    public void SomeMethod {
        MyApp.getBlueServer.doSomething(myObject);
    }
}

我只是不确定这是否是将实例传递给另一个类的正确方法,因为客户端和服务器都与 MyApp 通信。(请忽略类名,因为它们与应用程序的功能无关,我只是将它们用作名称,因为这是我能想到的第一件事)。

如果您需要任何澄清,请告诉我,因为我愿意学习和批评。如果这是错误的方式,请您解释为什么是错误的,然后解释正确的方式。

编辑

进一步澄清:

  • MyApp 可以访问客户端和服务器
  • 客户端可以访问 RedClient 和 BlueClient
  • 服务器可以访问 RedServer 和 BlueServer

没有其他类可以相互访问。

4

4 回答 4

2

您应该研究 Java 观察者模式:

http://www.javapractices.com/topic/TopicAction.do?Id=156

http://www.vogella.com/articles/DesignPatternObserver/article.html

于 2012-07-17T18:39:34.663 回答
2

我没有看到你传递/设置任何东西。

没有理由不能将客户端实例传递给服务器(反之亦然):

Client myClient = new Client(args);
Server myServer = new Server(args);

BlueClient = myClient.getBlueClient();
RedCLient = myClient.getRedClient();

BlueServer = myServer.getBlueServer();
RedServer = myServer.getRedServer();

myClient.addServer(blueServer);
myClient.addServer(redServer);

myServer.addClient(blueClient);
myServer.addClient(redClient);
于 2012-07-17T18:40:29.367 回答
1

我不确定你在问什么,但我认为你需要先阅读一些关于面向对象编程的知识。

对于您刚刚提出的情况(我不喜欢它,但我认为它更好),您可能有 Client 构造函数来接收服务器作为参数:

Client client1 = new CLient(server1)

因此您将能够从客户端方法访问 server1 对象。

于 2012-07-17T18:40:36.047 回答
1

你可以和单身人士一起工作。如果你有一个类并且你可以确定总是最多有一个实例,那么这个实例就是一个单例。我给你举个小例子:

public class MyClass {
    private static MyClass instance;
    public static MyClass getInstance() {
        if(instance == null)
            instance = new MyClass();
        return instance;
    }
    private MyClass() { }
}

有了这个,你可以从代码中的任何地方调用 MyClass.getInstance() ,你会得到一个单例;想一想;对于您谈论的情况,这可能非常实用。

于 2012-07-17T18:48:22.817 回答