Javaのstaticファクトリーメソッドのパターンを用いて、
コンストラクタを利用せずにインスタンスを生成する方法をメモ。
下記のコードはコンストラクタがprivateでもstaticなメソッド、valueOfメソッドからインスタンスを生成出来るようにした例である。
コンストラクタがprivateなため、インスタンスを生成して利用する際はgetInstanceメソッドを用いる。
(コンストラクタのようにクラスと同じでなく任意の名前をメソッド名に出来る)
(コンストラクタのようにクラスと同じでなく任意の名前をメソッド名に出来る)
public class Major { private Integer number = 0; private Major(Integer number) { this.number = number; } public static Major valueOf(Integer number) throws Exception { return new Major(number); } }
シングルトンパターンを利用したgetInstanceメソッドの例
public class Config { private static Config config = new Config(); private Config() { //設定情報の読み込み処理などを行う。 System.out.println("インスタンスを生成しました。"); } public static Config getInstance() { return config; } }
シングルトン(Singletone) パターンについて
シングルトンパターンを利用することでインスタンスが唯一の存在であることを保証することが出来る。
システムの中で共通で利用される設定情報など、一意に情報を保持したい場合に用いるパターンである。
getInstanceメソッドで返されるインスタンスが同じものかJUnitでテストしてみた。
@Test public void 唯一のインスタンスかどうか() { Config actual = Config.getInstance(); Config expected = Config.getInstance(); assertThat(actual,sameInstance(expected)); }