Today’s Effective Java 2003/08/27

– オブジェクトの生成と消滅 –
privateのコンストラクタでSingleton特性を強調する

static変数宣言時に初期化しているので、同期に関する問題はここではまだ議論されていない。
Singleton実装にあたっては、2つの方法が提示されているが、将来もSingletonであると確信できる場合は、前者の方法を採用し、そうでない場合には後者の方法を採用するのが良いとのこと。
個人的にはpublicなファクトリメソッドを提供する後者の方法が色々融通が聞きそうなので、そちらの採用が多くなりそうな気がする。

public class Singleton {
 public static final Singleton instance = new Singleton();
 private Singleton() { … }
 …
}

public class Singleton {
 private static final Singleton instance = new Singleton();
 private Singleton() { … }
 public static Singleton getInstance() { return instance; }
 …
}

シリアライズ可能にするためには、readResolveメソッドも提供しなければならない。
private Object readResolve() throws ObjectStreamException {
 return instance;
}

同じカテゴリの記事: Java