4

Googleでこの質問に対する答えを実際に見つけることができなかったので、ここに行きます。

プログラムの残りの部分がオブジェクトを参照できるように、静的オブジェクトを使用しても問題ありませんか? 質問を明確にする方法が正確にわからないので、サンプルコードを示します。

public class Client {

    Frame f;
    private static Client mainClient;

    public static void main(String[] args){
        new Client().init();
    }

    private void init(){

        mainClient = this;
        f = new Frame();

    }

    public static Client getClient() {
        return mainClient;
    }

    public Frame getFrame(){
        return f;
    }   
}

では、Frame オブジェクトにアクセスするために、プログラム全体で getClient() メソッドを使用して、作成する (ほとんどの) オブジェクトにパラメーターとして送信するのではなく、受け入れられるでしょうか? Frame はプログラム全体で使用され、それをパラメーターとして追加すると、各コンストラクターに 1 つのパラメーターが追加されるだけです。

ありがとう

4

8 に答える 8

6

複数のものに依存します...

1)使用法。MyClass.getClient() と言って Client 変数への参照を取得できるようにしたいですか? シングルトンのようなものを目指しているなら - はい。あなたが非常に便利なものを目指しているなら - はい、安全であれば、どこでも見えるようにしたいだけなら - いいえ。間違った場所/時間からアクセスするとクラッシュやバグが発生する場合 - いいえ。

2)人々人々は、あなたが公開したものは何でも使用します。あなたのコードがそのように Client を取得しているのを見たら、彼らはそれを不適切なときにも使用するので、多くのバグが発生するのでしょうか? :)

3)デザイン本当に必要ですか?いつでも絶対にアクセスできるよりも、引数のように渡す方がクリーンですか?

それらを測定した後、あなたは決定します。これは、ビルドして正常に動作するように見えます。しかし、ランタイム固有のものへのこの種の無制限のアクセス (上記のいつでもアクセス) を必要とするものは、最善のアプローチではない可能性があります。宿題でうまくいくものは、エンタープライズ ソフトウェアではうまくいかないかもしれません。

于 2013-06-24T14:30:17.447 に答える
1

あなたが説明しているものは、シングルトン パターンと呼ばれます。批判もありますが、よく使われるパターンです。

オブジェクトをすべてのコンストラクターに渡すための 2 つ目の代替手段は、依存性注入フレームワークです。Java の場合、最良の選択肢の 1 つはSpringです。

于 2013-06-24T14:28:36.967 に答える
0

SingleTon Patternのバリエーションを作成しました。静的オブジェクトは、プロジェクト全体でそのオブジェクトのインスタンスが 1 つだけ必要な場合に使用されます。

シングルトンの基本構造は

public class Client {
    private static Client mainClient;


    private void Client (){
         // do initial tasks
    }

    public static Client getClient() {
        if(mainClient == null)
            mainClient = new Client();
        return mainClient;
    }

    public Frame getFrame(){
        return f;
    }   
}

SOを使用してフレームを取得できます

Client.getClient().getFrame();
于 2013-06-24T14:30:08.087 に答える
0

静的インスタンスの使用は、定数/不変オブジェクトに対して完全に問題ありません。

可変オブジェクトに関しては、依存します。スレッドが 1 つの単純なプログラムでは、うまく機能します。ただし、マルチスレッドまたはクラスター化されている場合は、シングルトンを慎重に使用するか、まったく使用しないでください。

于 2013-06-24T14:37:27.967 に答える
0

さて、このシングルトン パターンの実装は、私が最も嫌いなものです。コードを書くのはとても簡単ですが、後で何かを変更する必要がある場合は、何百万もの場所を変更する必要があります。シングルトン パターンの場合、依存性注入 -シングルトン ファクトリパターンを使用した制御パターンの反転を使用し、定数(文字列、整数など)staticだけに変数を残します。

あなたの質問に関しては、すべて受け入れられます。実装は、プロジェクトの要件によって異なります。

于 2013-06-24T14:30:40.300 に答える