Singletonパターン
Head First デザインパターンのメモ。
注意点
- マルチスレッドアプリケーションに対してはパフォーマンスとリソース制限によって適切なSingletonの実装方法を選ばなければならない。
- 複数のクラスローダを使用する場合は、複数のインスタンスが作成される場合があるので注意。
- Singletonクラスをサブクラス化することは難しい。サブクラス化が必要な場合にはまず設計を見直す。
- Singletonを正しく実装することは意外と厄介。
実装
// マルチスレッドアプリ用に二重チェックロッキングを使うSingleton public class Singleton { private volatile static Singleton uniqueInstance; private Singleton() {} public static Singleton getInstance() { // インスタンスがない場合同期ブロックへ if (uniqueInstance == null) { // 同期化はオーバーヘッドとなるため初回実行時のみ同期化 synchronized (Singleton.class) { // 再度チェック if (uniqueInstance == null) { uniqueInstance = new Singleton(); } } } } }