Singleton パターン
GoFデザインパターン23種類の中で最も理解しやすい Singleton パターンについて。
Singleton パターンとは?
Singleton パターンとは、生成されるインスタンスが1個だけであることを保証する設計手法である。
「規約として、インスタンスを1個しか生成しない」のではなく、どう頑張っても1個しか生成できないように実装するのである。
Singleton パターンの特徴
簡単な実装例
以下に実装例を書く。
package knowledgefort.labo.oo.singleton; /** * @author おやつ丸 */ public final class SingletonLabo { static { labo = new SingletonLabo(); } /** * 外部からのインスタンス生成は出来ません。 */ private SingletonLabo() {} /** * SingletonLabo クラスの唯一のインスタンスを取得します。 * * @return */ public static SingletonLabo getInstance() { return labo; } /** * @return */ public void display() { System.out.println(this.getClass().getName()); return; } //*** 変数 private static final SingletonLabo labo; }
上記の例では、クラスが最初に参照され時に static イニシャライザにて唯一のインスタンスを生成している。
getInstance() が呼び出された時に変数 labo の null チェックを行って null だったら生成する方法もあるが、同期化コストが掛かるので非推奨。
使用方法
以下の通り。
import knowledgefort.labo.oo.singleton.*; ・・・ public static void main(String[] args) { SingletonLabo.getInstance().display(); return; }
出力は以下の通り。
knowledgefort.labo.oo.singleton.SingletonLabo