Javaでのシングルトンパターンの実装方法と使用例


  1. シングルトンクラスの基本的な実装: シングルトンクラスは、自身のインスタンスをプライベートな静的メンバ変数として持ち、公開された静的メソッドを通じてそのインスタンスにアクセスできるようにします。以下は基本的な実装例です。
public class Singleton {
    private static Singleton instance;
    private Singleton() {
        // インスタンス化を制限するためのプライベートコンストラクタ
    }
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
public class Singleton {
    private static Singleton instance;
    private Singleton() {
        // インスタンス化を制限するためのプライベートコンストラクタ
    }
    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
  1. ダブルチェックロッキングを使用した効率的なシングルトンの実装: 上記のスレッドセーフな実装は、getInstance()メソッドが呼び出されるたびに同期化が行われるため、パフォーマンスが低下する可能性があります。ダブルチェックロッキングを使用することで、同期化のコストを減らすことができます。
public class Singleton {
    private static volatile Singleton instance;
    private Singleton() {
        // インスタンス化を制限するためのプライベートコンストラクタ
    }
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

これらの実装方法を使用することで、Javaでシングルトンパターンを実現することができます。シングルトンは、インスタンスが1つしか存在しないことを保証する必要がある場合に特に有用です。