Help us understand the problem. What is going on with this article?

デザインパターン ~Singleton~

1. はじめに

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

2. Singletonパターンとは

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

3. サンプルクラス図

Singleton.PNG

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. 参考

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

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away