デザインパターン ~Singleton~


1. はじめに

GoFのデザインパターンにおける、Singletonパターンについてまとめます。

2. Singletonパターンとは

  • Singletonとは、要素を1つしか持たない集合という意味になります。
  • Singletonパターンは、インスタンスが1つしか存在しないことを保証する方式です。
  • 例えば、システム設定を表現したクラス、ウィンドウシステムを表現したクラス等があげられます。
  • GoFのデザインパターンでは、生成に関するデザインパターンに分類されます。

3. サンプルクラス図

4. サンプルプログラム

シングルトンインスタンスを生成するプログラムです。

4-1. Singletonクラス

唯一のインスタンスを返すクラスです。
Singletonクラスのコンストラクタはprivateになっています。これはSingletonクラス外からコンストラクタを呼び出すことを禁止するためです。

Singleton.cs
public class Singleton {

    private static Singleton singleton = new Singleton();

    private Singleton() {
        System.out.println("インスタンスを生成しました。");
    }

    public static Singleton getInstance() {
        return singleton;
    }
}

4-2. Mainクラス

メイン処理を行うクラスです。

Main.cs
public class Main {
    public static void main(String[] args) {
        Singleton obj1 = Singleton.getInstance();
        Singleton obj2 = Singleton.getInstance();
        if (obj1 == obj2) {
            System.out.println("obj1とobj2は同じインスタンスです。");
        } else {
            System.out.println("obj1とobj2は同じインスタンスではありません。");
        }
    }
}

4-3. 実行結果

インスタンスを生成しました。
obj1とobj2は同じインスタンスです。

5. メリット

Singletonパターンではインスタンスの数に制限を設けています。
インスタンスが複数存在すると、インスタンスたちが相互に影響し合って、思いがけないバグを生み出してしまうことがあります。
しかし、インスタンスが1つしかないという保証があれば、その前提条件でプログラミングすることができます。

6. GitHub

7. デザインパターン一覧

8. 参考

今回の記事、及びサンプルプログラムは、以下の書籍を元に作成させて頂きました。

大変分かりやすく、勉強になりました。感謝申し上げます。
デザインパターンやサンプルプログラムについての説明が詳細に書かれていますので、是非書籍の方もご覧ください。