キンサクプログラマー

お金儲けと技術のメモ

2.シングルトン(Singleton)

あるインスタンスが唯一であることを保証するための設計。
通常であればあるクラスを定義した場合いくらでもインスタンスの生成が可能

class Administrator
  def get_all_data
  end

  def register
    print self
  end
end

admin_taro = Administrator.new
admin_taro.register
admin_jiro = Administrator.new
admin_jiro.register

異なるインスタンスとして生成される。
ゲームのキャラデータや顧客データ等、であれば別々のインスタンスを生成して良いかもしれないが、
これらの情報を管理するような役割を持つクラスのインスタンスは1つだけであってほしい。
そんなときに使うのがシングルトン。

class Single_Administrator
  include Singleton
  def create
  end
  def show
  end
end

obj1 = Single_Administrator.instance.object_id
obj2 = Single_Administrator.instance.object_id
p obj1 #70351112045480
p obj2 #70351112045480

結果からわかるように2つのインスタンス変数が同じidを指している。
rubyの場合singletonモジュールがあるのでこいつをincludeしてあげればそのクラスがシングルトン化されるので非常に便利。