どうも、hamuです。
GoFのデザインパターン(23種)の内の1つであるSingletonパターンについて書いてみたいと思います。
この記事を読むと
- Singletonパターンがどういうパターンかが分かる
Singletonパターンとは
システム上、とあるクラスのインスタンスを1つしか作りたくない場合どうしますか?
もちろん、1回しかnewをしなければ、1つしかインスタンスは作成されません。
プログラムを書く人が気を付けて、1回しかnewを呼ばないのではなく、プログラムで必ず1個しかインスタンスが存在しないことを保証するのがSingletonパターンになります。
サンプル
サンプルのクラス図
MainクラスとSingletonクラスの2つのクラスのみとなっています。
処理の内容は、MainクラスでSingletonクラスのインスタンスを取得するだけになります。
2回Singletonクラスのインスタンスを取得して、取得した値の比較を行って同一インスタンスか確認しています。
では実際にサンプルを見ていきたいと思います。
サンプルコード(Java)
Mainクラス
public class Main { public static void main(String[] args) { System.out.println("start"); // 1回目 Singleton temp1 = Singleton.getInstance(); //2回目 Singleton temp2 = Singleton.getInstance(); // temp1とtemp2の比較 if (temp1 == temp2) { System.out.println("同一インスタンス"); } else { System.out.println("別インスタンス"); } System.out.println("end"); } }
Singletonクラス
public class Singleton { private static Singleton singleton = new Singleton(); private Singleton() { System.out.println("インスタンスを生成"); } public static Singleton getInstance() { return singleton; } }
実行結果
start インスタンスを生成 同一インスタンス end
処理説明
MainクラスからSingletonクラスのメソッドを2回呼び出し、戻り値の比較をしています。
実行結果より、1回目の戻り値と2回目の戻り値が同一だということが分かります。
コンストラクタは、privateにし外部から呼び出せないようにします。これにより、1つしか生成されないことを保証します。
まとめ
- Singletonパターンは、インスタンスが1個しか存在しないことを保障したパターン
この記事があなたのお役に立てればうれしく思います。
最後までお読みいただき、ありがとうございます。
参考図書
今回の記事内容、サンプルプログラムは、以下の書籍を元に作成させて頂きました。
|
コメント