RubyでSingletonの実装
Singletonとは、デザインパターンの一種でインスタンスが1つだけであることを保障します。
モジュールを使って実装する
require "singleton" class SingletonClass include Singleton #クラスの実装内容 def method() puts "hello" end end #obj = SingletonClass.new エラー obj = SingletonClass.instance obj.method()
Singletonというモジュールをmix-inさせるだけで実装出来ちゃいますので楽チンです。
インスタンスは「クラス名.instance」のメソッドで取得できます。
コンストラクタ(initialize)をprivateにして実装する
class SingletonClass private @@instance = nil #コンストラクタをprivate設定にしておく def initialize() puts "init" end public def self.getInstance() if @@instance == nil then @@instance = SingletonClass.new end return @@instance end #クラスの実装内容 def method() puts "hello" end end #obj = SingletonClass.new エラー obj = SingletonClass.getInstance() obj.method()
コンストラクタ(initialize)をprivateにすることでnewを防いでいる。
また、静的な変数を用意して内側でnewを行っている。
インスタンスは特異メソッドを利用して取得することが可能である。