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