2016-06-08 3 views
0

Я хочу получить различие в реализации singleton pattern в ruby ​​vs class и vs module. Я говорю об одноэлементном режиме только с методами класса и без экземпляров. Что касается меня, то логично использоватьRuby Singleton, module vs class

module Foo 
    def self.foo= other 
    @@foo=other 
    end 
    def self.foo 
    @@foo 
    end 
end 

, но очень часто я вижу в других коде class Foo;....;end, и я хочу, чтобы понять, почему? Если нет никаких случаев и не суб-классы Module удобнее. Или, может быть, я что-то пропущу?

Вопрос в том, что такое различие между модулем и классом в реализации одноэлементного шаблона?

+0

На самом деле существует множество способов реализации синглтонов в Ruby. Я нашел следующую статью довольно просвещенной: https://www.practicingruby.com/articles/ruby-and-the-singleton-pattern-dont-get-along – user1934428

ответ

1

Самый простой способ получить объект в Ruby, заключается в использовании, хорошо, объект:

class << Foo = Object.new 
    attr_accessor :foo 
end 

Используя либо модуль или класс является излишеством, и есть функции, которые не нужны.

+0

Это блестящая идея синтаксиса! Спасибо! –

0

Singletons - это объекты, класс которых гарантирует, что он создается только один раз, и тот же экземпляр используется всеми клиентами.

Модуль Ruby's Singleton помогает в достижении этого удобным образом.

  • Модуль не может считаться одиночным, поскольку он не может быть создан. Посмотрите на Can a Ruby module be described as a singleton class? для более подробной информации.
  • Чтобы сделать класс singleton, его лучше использовать модуль Singleton, чем повторно изобретать колесо.
+0

Я знаю, что такое singleton. Я спросил не об singleton, как о модуле stdlib, я спрашиваю об одноэлементном шаблоне программирования в рубине. с использованием модуля, а не класса. Да, модуль не может быть создан, но он может хранить собственные переменные модуля, и он не предназначен для реализации одноэлементного шаблона –