DesignPattern > SingletonPattern

概要

「Wikipedia - Singletonパターン」より引用
Singleton パターンを用いると、そのクラスのインスタンスが1つしか生成されないことを保証することができる。

登場人物

Singleton

  • クラスのインスタンスが1つしか生成されないことが保証されているクラス。

UML表現

  • 同じ型のインスタンスが privateなクラス変数として定義されている。
  • コンストラクタの可視性がprivateである。これにより、外部からnewされることを防ぐ。
  • 同じ型のインスタンスを返す getInstance()がクラスメソッドとして定義されている。

実装上での注意

  • Javaによる実装を以下に示す。
public class Singleton {
  private static final Singleton instance = new Singleton();
  private Singleton() {
  }
  public static Singleton getInstance() {
    return instance;
  }
}
  • 上記は以下のような実装による問題を改善した形といえる。
public class Singleton {
  private static Singleton instance;
  private Singleton() {
  }
  public static synchronized Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
  • 後者の実装例では、getInsatnceメソッドがほぼ同時に呼び出された場合に複数回インスタンスの生成が行われる(newされる)のを防ぐためsynchronizedを指定しているが、synchronizedの同期化にはコストがかかる。

参考サイト

最終更新:2011年09月26日 23:15