← 一覧に戻る

Singleton

生成パターン

クラスのインスタンスが1つだけであることを保証し、グローバルなアクセス手段を提供する。

目次
  1. クラス図
  2. 使いどころ
  3. コード例
  4. AIプロンプト例
  5. 注意点
  6. 関連パターン

クラス図

使いどころ

コード例

基本形(遅延初期化・スレッドセーフ)

public class ConfigManager {
    private static volatile ConfigManager instance;
    private Map<String, String> config;

    private ConfigManager() {
        config = new HashMap<>();
        loadConfig();
    }

    public static ConfigManager getInstance() {
        if (instance == null) {
            synchronized (ConfigManager.class) {
                if (instance == null) {
                    instance = new ConfigManager();
                }
            }
        }
        return instance;
    }

    private void loadConfig() {
        // 設定ファイル読み込み処理
    }

    public String get(String key) {
        return config.get(key);
    }

    public void set(String key, String value) {
        config.put(key, value);
    }
}

使用例

// どこからでも同じインスタンスにアクセス
ConfigManager config = ConfigManager.getInstance();
String dbUrl = config.get("database.url");

// 別の場所でも同じインスタンス
ConfigManager sameConfig = ConfigManager.getInstance();
sameConfig.set("app.mode", "production");

Enum版(最もシンプル・推奨)

public enum DatabaseConnection {
    INSTANCE;

    private Connection connection;

    DatabaseConnection() {
        // 接続初期化
    }

    public Connection getConnection() {
        return connection;
    }
}

AIプロンプト例

カスタマイズ用プロンプト

以下のSingletonパターンをカスタマイズしてください。

【要件】
・クラス名: [例: AppConfig]
・用途: [例: アプリケーション設定管理]
・保持するデータ: [例: Properties型の設定値]
・スレッドセーフ: [必要/不要]
・初期化タイミング: [起動時/初回アクセス時]

【ベースコード】
public class ConfigManager {
    private static volatile ConfigManager instance;
    private Map<String, String> config;
    
    private ConfigManager() {
        config = new HashMap<>();
    }
    
    public static ConfigManager getInstance() {
        if (instance == null) {
            synchronized (ConfigManager.class) {
                if (instance == null) {
                    instance = new ConfigManager();
                }
            }
        }
        return instance;
    }
}

【追加してほしい機能】
・設定ファイル(application.properties)からの読み込み
・環境変数の上書きサポート
・リロード機能

DB接続用プロンプト

データベース接続用のSingletonクラスを作成してください。

【要件】
・接続先: [MySQL/PostgreSQL/Oracle]
・接続プール: [HikariCP/DBCP2/なし]
・最大接続数: [10]
・タイムアウト: [30秒]

【必要なメソッド】
・getConnection(): Connection取得
・releaseConnection(Connection): 接続返却
・shutdown(): プール終了

注意点

← 一覧に戻る