1

基本的に、のインスタンスがシングルトンクラスを介して作成されるクラスがあります。このクラスは、シングルトンクラス以外の方法でインスタンス化しないでください。私の質問は、シングルトンを除いて、クラスが他のクラスに効果的に「見えない」ことができるかどうかです。

私は内部クラスやさまざまなパッケージなどが役立つことを知っていますが、誰かがこれに対する素晴らしい解決策を持っているかどうかを知りたいです。

返信ありがとうございます

4

5 に答える 5

2

クラス自体をシングルトンとしてリファクタリングするだけです。プライベートコンストラクターなど。

于 2012-04-14T19:05:55.730 に答える
1

インスタンス化がクラスメソッドを介してのみ行われるようにするには、次のようにします。

  • デフォルトのコンストラクターをプライベートにする
  • シングルトンインスタンスをプライベートメソッドに保存します
  • public staticメソッドを使用して、インスタンスをクライアントに提供します。

このサイトには良い例があります:

public class MySingleton { 
    private static MySingleton _instance = new MySingleton(); 

     private MySingleton() { 
        // construct object . . . 
    } 

    public static MySingleton getInstance() { 
        return _instance; 
    } 
于 2012-04-14T19:20:04.333 に答える
1

JavaにはC++のような「友達」の概念はありません

ネストされたクラス(実際の内部クラスは外部が必要なため機能しません)とパッケージについて言及しました。

他のクラスを保護するための他のアプローチですが、インスタンスの作成からのアプローチは私にはわかりません。

しかし、一般的に、ヘルパークラスによってシングルトンを構築する理由はありません。

列挙型または静的最終変数を使用してシングルトンを構築できます

Javaで列挙型をシングルトンとして使用するための最良のアプローチは何ですか?

public enum Elvis implements HasAge {
    INSTANCE;
    private int age;

    @Override
    public int getAge() {
        return age;
    }
}

class X {
     public static final X instance = new X ();

     private X () {
     }
     ...
}  
于 2012-04-14T19:07:54.590 に答える
1

サンプルシナリオでは、APIを使用して、宣言する必要がありますか?:

ToBeInvisibleClass instance = TheSingleton.getThatInvisibleInstnace();

答えが「はい」の場合、変数を宣言する必要があり、そのために型を表示する必要があるため、質問に対する答えは「いいえ」です。答えが「いいえ」の場合、内部/ネストされたクラスを使用するか、クラス自体をシングルトンにするのが適切なアプローチのようです。

于 2012-04-14T19:09:11.497 に答える
1

列挙型を使用してシングルトンを実行する簡単で効率的な方法:

public enum Singleton {
        INSTANCE;
        public void execute (String arg) {
            //... perform operation here ...
        }
}
于 2012-04-14T19:09:23.490 に答える