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メソッドを実装しなくてもよい。
- リフレクション攻撃に耐性がある。