86

SO question Best Singleton Implementation In Javaに書かれている内容に基づいて構築- つまり、列挙型を使用してシングルトンを作成することについて - 間の違い/長所/短所は何ですか (コンストラクターは省略されています)

public enum Elvis {
    INSTANCE;
    private int age;

    public int getAge() {
        return age;
    }
}

そして呼び出すElvis.INSTANCE.getAge()

public enum Elvis {
    INSTANCE;
    private int age;

    public static int getAge() {
        return INSTANCE.age;
    }
}

そして呼び出すElvis.getAge()

4

4 に答える 4

96

指定された任意のオブジェクトのプロパティを使用する何かにバインドしているとします。Elvis.INSTANCE は非常に簡単に渡すことができますが、Elvis.class を渡してプロパティを見つけることを期待することはできません (見つけるように意図的にコーディングされていない限り)。クラスの静的プロパティ)。

基本的に、インスタンスが必要な場合にのみシングルトン パターンを使用します。静的メソッドが問題なく機能する場合は、それらを使用して、列挙型を気にしないでください。

于 2009-01-09T12:39:01.630 に答える
69

大きな利点は、シングルトンがインターフェースを実装する必要がある場合です。あなたの例に従ってください:

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

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

と:

public interface HasAge {
    public int getAge();
}

スタティックでは無理…

于 2009-01-09T14:05:37.680 に答える
9

(ステートフル) シングルトンは通常、静的変数を使用していないふりをするために使用されます。public static 変数を実際に使用しないと、だまされる人が少なくなります。

于 2009-01-09T12:57:30.847 に答える
8

私は、最もシンプルで明確なオプションを選択します。これはやや主観的なものですが、何が最も明確かわからない場合は、最短のオプションを選択してください。

于 2009-07-19T11:16:08.337 に答える