どうも、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個しか存在しないことを保障したパターン
この記事があなたのお役に立てればうれしく思います。
最後までお読みいただき、ありがとうございます。
参考図書
今回の記事内容、サンプルプログラムは、以下の書籍を元に作成させて頂きました。
|
コメント