Singltonパターンの勉強

javaでプログラムを書くSingltonパターンが必要になったので調べてみた。wikipediaによると特徴は次のようなものらしい。

  • コンストラクタの可視性が private である。
  • 同じ型のインスタンスが private なクラス変数として定義されている。
  • 同じ型のインスタンスを返す getInstance() がクラス関数として定義されている。

コンストラクタの可視性が private である。

コードで書くとこういうことになる。

public class Singleton {
  private Singleton(){};
  … … … …
}

こうすることによって他のクラスからコンストラクタを呼び出すことを禁止しているようだ。

 new Singleton();

って言うコードを書くとコンパイル時にエラーになる。プログラマがコードを書くときにコンストラクタを作らないように一生懸命気にしなくても良いってことになるみたい。

同じ型のインスタンスが private なクラス変数として定義されている。

でもそうすると外部からコンストラクタを作ることができないのでSingletonクラスの中ですでにコンストラクタを作って持っておく必要がある。そのため同じ型のインスタンスが private なクラス変数として定義する必要がある。

同じ型のインスタンスを返す getInstance() がクラス関数として定義されている。

外部からSingletonクラスのコンストラクタを使いたい時にどうしたらよいのだろう。自分のクラスでコンストラクタを作ることができないので、Singletonクラスのクラス関数を使って今ストr化歌を低に入れる必要がある。だからコンストラクタを返すクラス関数の定義が必要だ。

  public static Singleton getInstance(){
    return Singleton.instance;
  }

ちなみにこの関数はstaticで定義しておく必要がある。そうじゃないとこの関数を使うことができないから。

 Singleton singleton = Singleton.getInstance//できる
 Singleton singleton = new Singleton().getInstance//できない