Java 静的ネストクラスシングルトンパターンの実装方法

Javaでは、静的内部クラスを使ったシングルトンパターンは次の手順で実装できます。

  1. プライベートな静的内部クラスSingletonHolderを作成し、外部クラスのインスタンスをプライベートな静的かつfinalとして宣言します。静的内部クラスの定義は次のとおりです。
private static class SingletonHolder {
    private static final Singleton instance = new Singleton();
}
  1. 外部クラスで、new 演算子によるオブジェクト生成を防ぐには、コンストラクタを private にする。
private Singleton() {}
  1. 外部クラスの中で、外部クラスのインスタンスを取得するための静的な public メソッド getInstance() を作成します。そのメソッド内で、SingletonHolder クラスの instance フィールドにアクセスして外部クラスのインスタンスを取得できます。
public static Singleton getInstance() {
    return SingletonHolder.instance;
}

上記のステップを実行することで、スレッドセーフかつ遅延初期化されたシングルトンパターンを実現できます。静的内部クラスの特徴として、初回アクセス時にのみロードされるため、遅延初期化の効果が保証されます。また、静的内部クラスのロードはスレッドセーフであり、マルチスレッド環境におけるシングルトンパターンの正しさが保証されます。

bannerAds