デザインパターン:Singleton(シングルトン)パターン
Singleパターンの概要
インスタンスが1個しか存在しないことを保証するパターンをSingletonパターンと呼びます。
singletonとは、要素を1個しかもたない集合のことです
サンプルプログラム
表 クラス一覧
名前 | 説明 |
---|---|
Singleton | インスタンスが1つしか存在しないクラス |
Main | 動作テスト用のクラス |
クラス図
以下、各クラスの説明
Singletonクラス
- インスタンスは1つしか作られません。
- staticフィールド(クラス変数)としてsingletonを定義し、Singletonクラスのインスタンスで初期化します。
- この初期化はSingletonクラスのロード時に一度だけ行われます。
- コンストラクタはprivateにします。privateにする理由は以下のとおりです。
- Singletonクラスの唯一のインスタンスを得るための static メソッドを定義します。ここでは、getInstance()という名前にしています。
Singleton.java
public class Singleton { private static Singleton singleton = new Singleton(); private Singleton() { System.out.println("インスタンスを生成しました"); } public static Singleton getInstance() { return singleton; } }
Mainクラス
- SingletonクラスのgetInstanceメソッドを呼び出しSingletonのインスタンスを取得します。
- インスタンスが1つしか存在しないことを確認するため、getInstanceメソッドを2回呼び出しそれぞれobj1とobj2に代入し、obj1 == obj2でテストしています。
Main.java
public class Main { public static void main(String[] args) { System.out.println("Singletonプログラム開始"); 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("Singletonプログラム終了"); } }
実行結果:
Singletonプログラム開始 コンストラクタ:インスタンスを生成しました obj1とobj2は同じインスタンスです Singletonプログラム終了
- プログラムが開始後、getInstanceメソッドを呼び出したときに Singletonクラスが初期化され static フィールドの初期化が行われ、唯一のインスタンスが生成されます。
- 実行結果から、Singletonパターンの目的どおりインスタンスが1つしか存在しないことを保証できることが確認できました。
参考:詳しくは、以下の書籍を参照してください(練習問題もあります)。