0

まず、これがばかげた質問である場合はお詫び申し上げます。これは最近私を悩ませています、そして私はそれが尋ねる価値があると思いました...

クラスが次のように流れるアプリケーションがあります。

ここに画像の説明を入力してください

現在、ClientクラスとServerクラスが、MyAppのメインで作成された相互のインスタンスにアクセスできるようにしようとしています。問題は、インスタンスが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

JavaObserverパターンを調べる必要があります。

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

シングルトンで作業できます。クラスがあり、のインスタンスが常に最大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 に答える