Singleton〜オブジェクトの重複排除〜 <- 言葉で理解するデザインパターン <- TetraCalibers
TetraCalibers :
    -   for : science student & programmer
言葉で理解するデザインパターン - 1
Singleton
オブジェクトの重複排除

     

    目的

     

    • プログラム上にそのクラスのオブジェクトがただ一つしか存在しないようにしたい
    • 何度オブジェクトを生成しても、すべて共通のオブジェクトを参照するようにしたい

     

    適用例

     

    • システム全体をクラスで表現し、そのクラスを使ってシステムを起動するとき(何回も起動されたら困る)
    • 複数クラスで分担してDOM部品を組み立てて、最終的に一つのXML文書として合体させるとき(全DOM要素が、親として共通のrootノードを参照しなければ困る)
    • システムの設定管理を担うクラスを作成するとき(一つのシステムの設定は、一箇所に集めておかなければ不整合が生じる)

     

    [基本形]オブジェクトの数を一つのみにしたい

     

    1. コンストラクタをprivateにし、外部からnewできないようにする
    2. private(かつstatic)なクラス変数として、newしたオブジェクトを保持しておく
    3. クラスがprivate変数として保持している唯一のオブジェクトのゲッタメソッドを定義する

     

    [発展形]オブジェクトの数を一定にしたい

     

    必要な数のオブジェクトをHashMap等でクラス内に保持しておき、インスタンスのゲッタメソッドに渡された引数に応じて適切なオブジェクトを返すようにする。