脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

Rubyでsingleton classの作成と利用

singleton機能を使うことで、そのクラスは一つのインスタンスしか持たないように設定することが出来ます。

使い方

singletonの組み込み
require 'singleton'
class SingletonTest
  include Singleton

  #{処理}
end
  1. singleton モジュールをrequire
  2. singletonにしたいclassの内部でinclude

これだけです

singletonクラスの利用(呼び出し)
SingletonTest.instance
  • singletonで設定したclassを呼び出すにはinstanceメソッドを使用します
  • 通常のnewメソッドは使用できません

Example

require 'singleton'
class SingletonTest
  include Singleton

  attr_accessor :foo

  def initialize
    puts 'call initialize!!'
    @foo = 0
  end
end

a = SingletonTest.instance # ==> #<SingletonTest:0x00000001c12db0>
b = SingletonTest.instance # ==> #<SingletonTest:0x00000001c12db0>

a.foo = 1
puts b.foo # ==> 1
  • puts 'call initialize!!'は一度しか呼び出されません
  • aの方のinstanceのインスタンス変数を書き換えただけなのに、bの方で呼び出したインスタンス変数が1に変更になっています。
  • このことから、インスタンスが共有されている(一つしか作成されていない)ことがわかります。