我在Ruby中使用单例模式。
我知道singleton实现了一个对象的单个实例,但我不太明白我们是否可以在没有singleton模块的情况下复制它。
然后是私有方法的问题;现在我必须做这样的事情:
class MyTestClass
private_class_method :new
class << self
def test
puts hello
end
private
def hello
'hello world'
end
end
end
MyTestClass.test
所以我的问题是:
答案 0 :(得分:2)
1。上面是一个好的单身人士模式
可能不是。仅使用类方法,您无法获得为单个“实例”执行initialize
函数的好处,因此它缺少一些您通常在Singleton中找到的部分。 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"