はじめに
デザインパターンの Singleton を学習した際の内容を整理しました。
Singleton パターン
シングルトンパターンは、クラスのインスタンスが 1 つしか存在しないことを保証するデザインパターン。
利用目的
アプリケーション全体で一つのインスタンスだけが必要な場合に使用する。
具体的な利用例は次に掲げるものなど。
- 設定管理や構成データの共有
例えば、アプリケーション設定や環境変数を一つのインスタンスで管理し、全体で共有する場合。 - データベース接続の管理
データベース接続プールを1つのインスタンスとして保持し、それを複数の部分で再利用する場合にシングルトンパターンを使う。こうすることで、無駄な接続が作成されることを防ぎ、リソースを効率的に利用できる。 - グローバルにアクセスするリソース
グローバルにアクセスされるリソース、例えばプリンターやファイルシステム、外部 API のクライアントなどを 1 つのインスタンスで共有し、管理する際に使用する。
注意点
- テストが難しい
シングルトンはグローバルな状態を持つため、ユニットテストでテストがしにくい場合がある。モック化が難しく、テストの独立性が損なわれることがある。 - 依存関係が増える
シングルトンに依存しすぎると、システム全体の結合度が高くなり、柔軟性が失われることがある。
実装
Singleton.java
public class Singleton {
// 唯一のインスタンスを保持する静的フィールド
private static Singleton instance;
// コンストラクタをprivateにして外部からのインスタンス生成を防ぐ
private Singleton() {
}
// インスタンスを取得するための静的メソッド
public static Singleton getInstance() {
if (instance == null) {
// 初回のみインスタンスを生成
instance = new Singleton();
}
return instance;
}
// シングルトンインスタンスに対するメソッド
public void showMessage() {
System.out.println("Hello singleton World!");
}
}
App.java
public class App {
public static void main(String[] args) throws Exception {
Singleton singleton = Singleton.getInstance();
singleton.showMessage();
}
}