Предположим, что классу необходимо загрузить внешнюю библиотеку, которая занимает некоторое время для загрузки и, следовательно, должна быть загружена только один раз. Двумя естественными решениями для этого было бы использование одноэлементного шаблона или шаблона моностата. Есть ли какое-либо преимущество для любого из этих решений в этом конкретном контексте в Ruby?Singleton vs. Monostate Pattern в Ruby
Например:
# Using a Singleton class
require 'singleton'
class Parser
include Singleton
def initialize
@parser = load_external_library
end
def parse(sentence)
@parser.parse(sentence)
end
end
# Then calling using...
Parser.instance.parse(sentence)
Против:
# Using a Monostate class
class Parser
def self.parse(sentence)
@@parser ||= load_external_library
@@parser.parse(sentence)
end
end
# Then calling using...
Parser.parse(sentence)
Поскольку второй синтаксис гораздо чище, есть ли какие-либо преимущества в использовании Singleton в Ruby?
Метод 'require' загружает библиотеку и предотвращает ее загрузку более одного раза. – steenslag
Я специально ссылался на библиотеку, отличную от Ruby, которая не может быть обработана просто по требованию, хотя ваше предложение указывает на третий способ достижения одного и того же: 'class Parser; @@ parser = load_external_library; def self.parse (предложение); @@ parser.parse (предложение); конец; end' ... затем в другом файле 'require 'parser''. Это похоже на моностат, но пользовательский код теперь отвечает за его требование только один раз, что может быть [более сложным, чем ожидалось] (http://ghouston.blogspot.com/2007/05/ruby-require-idiom.html). Есть предположения? – user2398029