1.Вышеуказанный хороший паттерн синглтона
Вероятно, нет.Используя только методы класса, вы не получаете преимущества от выполнения функции initialize
для вашего единственного «экземпляра», поэтому в ней отсутствуют некоторые части, которые вы обычно находите в Singleton.Ruby достаточно гибок, поэтому вы можете прикрепить любые недостающие объекты к объекту «class» по мере необходимости, но он начинает выглядеть уродливо.Будет ли это гарантировать, что существует только один экземпляр?
Да.Вы модифицируете объект, который представляет класс, и есть только один.
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"