備忘録

物忘れが酷いので

Singleton

概要

シングルトンは外部からのオブジェクトの生成を禁止し
代わりにオブジェクトへのアクセスの手段を提供することで
システム内に存在するオブジェクトが1つであることを保証する。
newを使ってオブジェクトを生成した場合、コンストラクタ
呼び出され初期化される。
しかし、システムの中にはこうした初期化が行われると
不都合な場合がある。
ロケールやLook&Feelなど
システム起動中にオブジェクトを1つだけ生成することを決めていたと
しても、それをオブジェクトを利用する側で管理するのは難しい。
そのためシングルトンが用いられる。

シングルトンの実現方法

・同じ型のインスタンスをクラス変数として宣言
コンストラクタの可視性をprivateで宣言する。
・getInstance()クラスメソッドによってオブジェクトを返すようにする。

//Javaです
public class Singleton{

  private static Singleton singleton;
  //ここでインスタンスをクラス変数として宣言
  //...

  private Singleton(){
    //....
  }
  //コンストラクタの可視性をprivateとして宣言

  public static Singleton getInstance(){
    if( singleton == null ){
      singleton = new Singleton();
    }
    return singleton;
  }
 //getInstance()クラスメソッドでオブジェクトを返す
 
  public synchronized Object getter(Object hoge){
    return hoge;
  }

  public synchronized void setter(Object hoge){
    //...
  }
}

注意

オーバーライドするときはコンストラクタをprotectedまたは
publicにする必要があるので、シングルトンを実現するのは大変。

理解が深まったら追記

http://ja.wikipedia.org/wiki/Singleton_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3#cite_note-GoF-1