Design Patterns : Singleton 2018/4
• 1つの実行環境中で1つのインスタンスのみを生成するパターン。
• シングルトンインスタンスと呼び出すクラスとの関係が1:Nとなるため同期を考える必要がある。
UML
プライベートフィールドとプライベートコンストラクタをもつシングルトンクラス
シングルトンクラスを使用するテストクラス
テストクラスの実行結果
• 1つの実行環境中で1つのインスタンスのみを生成するパターン。
• シングルトンインスタンスと呼び出すクラスとの関係が1:Nとなるため同期を考える必要がある。
UML
Singleton
-singleton
-Singleton
+getInstance
プライベートフィールドとプライベートコンストラクタをもつシングルトンクラス
public class Singleton {
/* Private static field */
private static final Singleton singleton = new Singleton();
/* Private Constructor */
private Singleton() {
System.out.println("Constructor has been called.");
}
public static Singleton getInstance() {
System.out.println("getInstance has been called.");
System.out.println(singleton.hashCode());
return singleton;
}
}
シングルトンクラスを使用するテストクラス
public class TestRun {
public static void main(String[] args) {
System.out.println("Start");
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
Singleton singleton3 = Singleton.getInstance();
System.out.println("End");
}
}
テストクラスの実行結果
Start Constructor has been called. /* 最初のgetInstance呼出の際にコンストラクタが呼ばれる */ getInstance has been called. 2051450519 getInstance has been called. 2051450519 getInstance has been called. /* 3回とも同じインスタンスが呼ばれている。 */ 2051450519 End