Javaのデザインパターンシングルトン

Javaのデザインパターンシングルトン

デザインパターンのシングルトンについてです。

シングルトンはAPサーバ起動してからインスタンスが常にひとつであり、ガベージコレクションの対象外となるのが特徴です。

通常ガベージコレクションの対象となり、メモリから解放されますが、シングルトンは自分自身を参照しているので、ずっとメモリ上に存在します。

インスタンス生成できないようにコンストラクタはprivateにします。

getInstanceメソッドは同期しなければいけません。

インスタンスはグローバル変数となります。

メリットは省メモリプログラミングであることです。

デメリットはテストがしにくかったり、クラス間のつながりが強くなると言う事が上げられます。

以下、シングルトンのサンプルです。

package jp.co.confrage;

public class Test {
  /** グローバル変数 */
  private static Test instance;

  /**
   * プライベートコンストラクタ
   */
  private Test() {} // 不可視

  /**
   * Testインスタンスを同期をとって返す
   * @return instance Testインスタンス
   */
  public static synchronized Test getInstance() {
    if (instance == null) {
      instance = new Test();
    }
    return instance;
  }
}

enumによるシングルトン

Javaのenum(列挙型)を使えば簡単にシングルトンを実装することが出来ます。

これはenumがprivateコンストラクタ、継承不可能であることを利用しています。

package jp.co.confrage;

public enum EnumSingleton {
  INSTANCE;
  private int day;
  public int getDay() {
    return day;
  }
  public void setDay(int day) {
    this.day = day;
  }
}

使用方法です。

package jp.co.confrage;

public class SampleMain {
  public static void main(String[] args) {
    EnumSingleton a = EnumSingleton.INSTANCE;
    a.setDay(2);
    System.out.println(a.getDay()); // 2
  }
}

コメント

タイトルとURLをコピーしました