【デザインパターン】Singletonパターン

【PR】この記事には広告を含む場合があります。

どうも、hamuです。

GoFのデザインパターン(23種)の内の1つであるSingletonパターンについて書いてみたいと思います。

 

この記事を読むと

  • Singletonパターンがどういうパターンかが分かる
スポンサーリンク

Singletonパターンとは

システム上、とあるクラスのインスタンスを1つしか作りたくない場合どうしますか?

もちろん、1回しかnewをしなければ、1つしかインスタンスは作成されません。

プログラムを書く人が気を付けて、1回しかnewを呼ばないのではなく、プログラムで必ず1個しかインスタンスが存在しないことを保証するのがSingletonパターンになります。

サンプル

サンプルのクラス図

MainクラスとSingletonクラスの2つのクラスのみとなっています。

処理の内容は、MainクラスでSingletonクラスのインスタンスを取得するだけになります。

2回Singletonクラスのインスタンスを取得して、取得した値の比較を行って同一インスタンスか確認しています。

Singleton

では実際にサンプルを見ていきたいと思います。

サンプルコード(Java)

Mainクラス

public class Main {

	public static void main(String[] args) {
		System.out.println("start");
		// 1回目
		Singleton temp1 = Singleton.getInstance();
		//2回目
		Singleton temp2 = Singleton.getInstance();
		// temp1とtemp2の比較
		if (temp1 == temp2) {
			System.out.println("同一インスタンス");
		} else {
			System.out.println("別インスタンス");
		}
		System.out.println("end");
	}
}

Singletonクラス

public class Singleton {

	private static Singleton singleton = new Singleton();

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

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

実行結果

start
インスタンスを生成
同一インスタンス
end

処理説明

MainクラスからSingletonクラスのメソッドを2回呼び出し、戻り値の比較をしています。

実行結果より、1回目の戻り値と2回目の戻り値が同一だということが分かります。

コンストラクタは、privateにし外部から呼び出せないようにします。これにより、1つしか生成されないことを保証します。

まとめ

  • Singletonパターンは、インスタンスが1個しか存在しないことを保障したパターン

 

この記事があなたのお役に立てればうれしく思います。

最後までお読みいただき、ありがとうございます。

参考図書

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

 

 

コメント

タイトルとURLをコピーしました