【Java】Singletonパターン【デザインパターン】
目次
Singletonパターンについて
Singletonパターンとは
サンプルプログラム
名前 | 役割 |
---|---|
Singleton | インスタンスが1つしかないクラス |
Main | 動作テスト用クラス |
Singletonクラス
- staticフィールド(クラス変数)としてsingletonを定義し、Singletonクラスのインスタンスで初期化します
- コンストラクタをprivateにすることで、Singletonクラスの外でコンストラクタの呼び出しを禁止します
- これで、インスタンスが1つしか生成されないことを保証することができます
- 唯一のインスタンスを得るためのstasticメソッド(getInstance)で同じインスタンスを返します
public class Singleton { private static Singleton singleton = new Singleton(); private Singleton() { System.out.println("インスタンスを生成しました。"); } public static Singleton getInstance() { return singleton; } }
Mainクラスで動作確認
- SingletonクラスのgetInstanceメソッドを使ってSingletonのインスタンスを得ています
- ここで、obj1,obj2のように二回インスタンスを得ていますが、同一性の判定結果は、"obj1とobj2は同じインスタンスです" と表示されます
- Singletonクラスのコンストラクタは一回しか呼ばれていないので、getInstanceしても同じインスタンスが帰されることになります!
public class Main { public static void main(String[] args) { System.out.println("Start."); Singleton obj1 = Singleton.getInstance(); Singleton obj2 = Singleton.getInstance(); if (obj1 == obj2) { System.out.println("obj1とobj2は同じインスタンスです。"); } else { System.out.println("obj1とobj2は同じインスタンスではありません。"); } System.out.println("End."); } }
Singletonパターンのメリット
今日のポイント
- 生成するインスタンスの数を1つに制限するデザインパターンです
- Singletonクラスのコンストラクタをprivateにすることで、Singletonクラスの外でコンストラクタの呼び出しを禁止します
- これによって、インスタンスが1つしか生成されないことを保証することができます
- Singletonクラス内の、唯一のインスタンスを得るためのstasticメソッド(getInstance)で同じインスタンスを返します
- Singleton利用クラスから、Singletonクラスのインスタンスを複数回得る(getInstance)場合でも、 Singletonクラスのコンストラクタは一回しか呼ばれないので、同一のインスタンスが帰されることになります
本日もお疲れ様です😊