1

我正在与 Ruby 中的单例模式作斗争。

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

然后是私有方法的问题;现在我必须做这样的事情:

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

    private
    def hello
      'hello world'
    end
  end
end

MyTestClass.test

所以我的问题是:

  1. 以上是一个好的单例模式吗?
  2. 这会确保只有一个实例吗?
  3. 有没有办法使用单例模块拥有私有方法?
4

1 回答 1

2

1. 以上是不是很好的Singleton模式

可能不是。仅使用类方法不会获得initialize为单个“实例”执行函数的好处,因此它缺少一些您通常会在单例中找到的部分。Ruby 足够灵活,因此您可以根据需要将任何缺少的功能附加到“类”对象,但它开始看起来有点难看。

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

是的。您正在修改代表类的对象,并且只有一个。

3. 有没有办法使用单例模块拥有私有方法?

是的。你有没有尝试过?正如您所期望的那样。

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"
于 2011-11-23T10:22:39.300 回答