Singletonシングルトン-デザインパターンの勉強

Singletonシングルトン。
クラスのインスタンスを1つしか作りたくないときに利用するパターンです。

『それはプログラマが注意すればいいだけじゃん!!!』ってのはダメです。
人間はミスをしますから、インスタンスが1つしか作られないようにプログラミングします。


http://www.hyuki.com/dp/#downloadのサンプルプログラムは以下の通り。

Singleton.java
  1 public class Singleton {
  2   private static Singleton singleton = new Singleton();
  3   private Singleton() {          
  4     System.out.println("インスタンスを生成しました。");
  5   } 
  6   public static Singleton getInstance() {
  7     return singleton;
  8   } 
  9 }
Main.java
  1 public class Main {
  2   public static void main(String[] args) { 
  3     System.out.println("Start.");
  4     Singleton obj1 = Singleton.getInstance();
  5     Singleton obj2 = Singleton.getInstance();
  6     if (obj1 == obj2) {
  7       System.out.println("obj1とobj2は同じインスタンスです。");
  8     } else {
  9       System.out.println("obj1とobj2は同じインスタンスではありません。");
 10     }
 11     System.out.println("End.");
 12   }
 13 }

実行してみる。

$ java Main
Start.
インスタンスを生成しました。
obj1とobj2は同じインスタンスです。
End.


マルチスレッド実行中ではタイミングの関係で整合性が取れない場合も考えられるので、synchronizedで他のインスタンスをブロックする必要がありますね。

雑感

・staticの利用場面がよく分からなかったけど、こういう場合に使うのか。