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を行っている。
インスタンスは特異メソッドを利用して取得することが可能である。