0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【デザインパターン】Singletonパターンについて学習

Last updated at Posted at 2024-09-27

はじめに

デザインパターンの 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();
    }
}

クラス図

Singleton_class_diagram.jpg

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?