Effective Java - Item 3. privateコンストラクタや列挙型でシングルトンであることを保証する

privateのコンストラクタまたはenum型でシングルトン特性を強制する。

Java 1.5(Tiger)では、1つの要素だけを持つenum型を提供することでシングルトンを作成できる。

public enum MySingleton {
    INSTANCE;

    public void greet() { ... }
}

private staticなフィールドを利用してシングルトンクラスを作る方法に比べて、次のような利点がある。

  • シリアライズ機能を備える。
    • implementes Serializableしなくてもよい。
  • 直列化攻撃に耐性がある。
    • readResolveメソッドを実装しなくてもよい。
  • リフレクション攻撃に耐性がある。