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の大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント