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
}
}

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^


コメント