我正在与Ruby中的单例模式进行斗争。
我知道单例实现了对象的单个实例,但我不太明白我们是否可以在不使用单例模块的情况下复制它。
还有私人方法的问题,现在我必须这样做:
class MyTestClass
private_class_method :new
class << self
def test
puts hello
end
private
def hello
'hello world'
end
end
end
MyTestClass.test所以我的问题是:
发布于 2011-11-23 10:22:39
1。以上是一个很好的单例模式吗?
可能不会。仅使用类方法无法为单个“实例”执行initialize函数,因此缺少了一些通常在Singleton中可以找到的部分。Ruby具有足够的灵活性,因此您可以根据需要将任何缺失的特性插入到"class“对象中,但是它看起来有点难看。
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"https://stackoverflow.com/questions/8239232
复制相似问题