シングルトンパターン
GoFの設計パターンの一つで、クラスのインスタンスを一つだけに制限し、そこへのグローバルなアクセスを提供する。パターンであると同時に、アンチパターンとも呼ばれがちである。
古典的なJavaではコンストラクタをprivateにし、static な getInstance() から取得する形をとる。スレッドセーフにするにはダブルチェックドロックか早期初期化が必要になる。現代では、DIコンテナの「シングルトンスコープ」を使えばグローバル状態を持たずに同じ効果が得られる。
批判の中心は、グローバル状態のためテストしにくいこと、依存性注入を損なうこと、依存関係が見えなくなることである。ロガーやキャッシュのように本当にプロセス全体で一つでよいものなら許容できるが、基本的にはDIを選ぶほうがよい。