Java 静的ネストクラスシングルトンパターンの実装方法
Javaでは、静的内部クラスを使ったシングルトンパターンは次の手順で実装できます。
- プライベートな静的内部クラスSingletonHolderを作成し、外部クラスのインスタンスをプライベートな静的かつfinalとして宣言します。静的内部クラスの定義は次のとおりです。
private static class SingletonHolder {
private static final Singleton instance = new Singleton();
}
- 外部クラスで、new 演算子によるオブジェクト生成を防ぐには、コンストラクタを private にする。
private Singleton() {}
- 外部クラスの中で、外部クラスのインスタンスを取得するための静的な public メソッド getInstance() を作成します。そのメソッド内で、SingletonHolder クラスの instance フィールドにアクセスして外部クラスのインスタンスを取得できます。
public static Singleton getInstance() {
return SingletonHolder.instance;
}
上記のステップを実行することで、スレッドセーフかつ遅延初期化されたシングルトンパターンを実現できます。静的内部クラスの特徴として、初回アクセス時にのみロードされるため、遅延初期化の効果が保証されます。また、静的内部クラスのロードはスレッドセーフであり、マルチスレッド環境におけるシングルトンパターンの正しさが保証されます。