singleton - 单例模式私有方法和单

  显示原文与译文双语对照的内容

我正在与 ruby 中的singleton模式战斗。

我知道单个实例实现了一个对象实例,但是我不明白我们是否可以在没有单独模块的情况下。

然后,private 方法有问题,现在我必须做这样的事情:


class MyTestClass
 private_class_method :new
 class <<self
 def test
 puts hello
 end

 private
 def hello
 'hello world'
 end
 end
end

MyTestClass.test

所以我的问题是:

  1. 上面是一个好的单一 Pattern?
  2. 这是否确保只有一个实例?
  3. 是否有方法使用 private 方法来使用singleton模块?
时间:

1.上是一个好的单变量 Pattern

可以能不是。只有使用类方法,才能为单个"范例"执行 initialize 函数。 ruby 足够灵活,因这里可以根据需要将任何缺失的特性锁定到"类"对象。

2.这会确保只有一个实例?

是,你正在修改表示该类的对象,并且只有一个对象。

3 。是否有方法可以使用单一模块来使用 private 方法?

你试过就像你预期的那样。


class Test
 include Singleton
 def public_test
"foo"
 end
 private
 def private_test
"bar"
 end
end

Test.instance.public_test # =>"foo"
Test.instance.private_test # => throws exception
Test.instance.send(:private_test) # =>"bar"

...