インスタンスの生成を制限したシングルトンを、Rubyの特異クラスを使って実装してみよう。 SingletonClass
をシングルトンクラスとする。このクラスの生成SingletonClass.new
を不可能にして、インスタンスの取得はSingletonClass.get_instance
でのみ可能とする。
# シングルトン保持用の定数
SINGLETON_OBJECT = Object.new
# 特異クラス定義式による特異クラスの定義
class << SINGLETON_OBJECT
def only_method
:only_method
end
end
=begin
# 注) 上記はSINGLETON_OBJECTに
# 特異メソッドを定義する以下と同様
def SINGLETON_OBJECT.only_method
:only_method
end
=end
# シングルトンを得るための特異クラスの作成
SingletonClass = SINGLETON_OBJECT.singleton_class
# 特異クラスのクラスメソッド(クラスの特異メソッド)の定義
def SingletonClass.get_instance
SINGLETON_OBJECT
end
# シングルトンの確認
p SINGLETON_OBJECT # => #<Object:0x000000026504f8>
p SingletonClass # => #<Class:#<Object:0x000000026504f8>>
p SingletonClass.get_instance # =>
#<Object:0x000000026504f8>
サンプルコードの出典は、パーフェクトRubyの6-3-8から。(一部改変)
パーフェクトRuby (PERFECT SERIES 6)
posted with amazlet at 13.12.01
Rubyサポーターズ すがわら まさのり 寺田 玄太郎 三村 益隆 近藤 宇智朗 橋立 友宏 関口 亮一
技術評論社
売り上げランキング: 10,788
技術評論社
売り上げランキング: 10,788