読者です 読者をやめる 読者になる 読者になる

新人SEの学習記録

14年度入社SEの学習記録用に始めたブログです。気づけば社会人3年目に突入。

学習記録:デザインパターン

[学習記録] デザインパターン

内容:第5章 Singletonパターン

概要
  • プログラムを動かすとき、通常はたくさんのインスタンスが生成される
    • このクラスのインスタンスは1個しか作らない、作りたくないという場合もある
    • 指定したクラスのインスタンスが絶対に1個しか存在しないことを保証したい場合に使用するパターン
    • Singletonパターン、Singletonとは要素を1個しか持たない集合のこと
サンプルプログラム
Singleton インスタンスが1個しか存在しないクラス
Main 動作テスト用
public class Singleton {
	private static Singleton singleton = new Singleton();

	private Singleton() {
		System.out.println("インスタンスを生成しました。");
	}
	
	public static Singleton getInstance() {
		return singleton;
	}
}
public class Main {
	public static void main(String[] args) {
		System.out.println("Program start.");
		
		Singleton s1 = Singleton.getInstance();
		Singleton s2 = Singleton.getInstance();

		if (s1 == s2) {
			System.out.println("s1とs2は同じインスタンスです。");
		}
	}
}
Program start.
インスタンスを生成しました。
s1とs2は同じインスタンスです。
登場人物
まとめと補足
  • インスタンス生成のタイミング
    • サンプルからProgram start.の後にインスタンスを生成していることがわかる
    • 最初にgetInstanceを呼び出したときにSingletonクラスが初期化され、そのときにstaticフィールドが初期化される
  • 関連するパターン
    • Abstract Factoryパターン(8章)
    • Builderパターン(7章)
    • Facadeパターン(15章)
    • Prototypeパターン(6章)