ruby学習メモ Singleton

コンストラクタの private 化とインスタンスの Singleton 化

class MyClass
   # new をプライベート化することにより、コンストラクタによるインスタンス化
   # が出来ないようにする
  private_class_method :new

  #インスタンスを保持するクラス変数
  @@singleton = nil

  #インスタンス生成クラスメソッド
  def MyClass.create
    @@Logger = new unless @@singleton
    @@singleton
  end
end
irb(main):141:0* MyClass.create.object_id
=> 4
irb(main):142:0> MyClass.create.object_id
=> 4
irb(main):143:0>
irb(main):144:0* MyClass.new
NoMethodError: private method `new' called for MyClass:Class
        from (irb):144
        from :0