LoginSignup
1
1

More than 5 years have passed since last update.

【デザインパターン】 Singletonパターン

Last updated at Posted at 2015-06-21

概要

クラスのインスタンスがひとつしか生成されないことを保証し、クラスへのグローバルなアクセス方法を提供するパターン

以下の1種類のクラスからなる
1. Singletonクラス(クライアントがアクセスできる唯一のインスタンスである、Instanceオペレーションを定義)

具体例と実装

施設の鍵を例にすると

上記には
1. マスターキークラス

が対応する。
コードの詳細は以下(比較、理解のためマスターキークラスとと通常の鍵クラスを記述)

master_key.rb
class MasterKey
include Singleton
  def open(room)
    # 必ず鍵を開ける
  end
end
room_key.rb
class RoomKey
  def initialize(room)
    @room = room
  end

  def open(room)
    if room == @room
      # 鍵を開ける
    else
      # 鍵が開かない
    end
  end
end

メリット

  • クライアントがアクセスするインスタンスをただひとつにすることで、オブジェクトの生成を制御出来る
  • グローバル変数を宣言する必要がなくなり、名前空間を減らせる
  • 特にポリモーフィズムが絡み、状態をもたないクラス(上記の例では、たとえば、鍵クラスが多態性をもち、様々な部屋に対応した鍵と、必ずどんな部屋でも開けられるマスターキーを定義したいときに、状態を持たないマスターキーをSingletonパターンを使って実装している)を明示的に示す場合に用いると効果的

まとめ

クラスの生成するインスタンスをただひとつに制限するパターン
あるクラスから生成されるインスタンスを共通で使い回したい場合、クラスが状態を持たない場合を明示したい場合に用いる

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1