Предположим, что классу необходимо загрузить внешнюю библиотеку, загрузка которой занимает некоторое время и, следовательно, должна быть загружена только один раз. Двумя естественными решениями этой проблемы было бы использование синглтонного паттерна или моносостояния. Есть ли какое-либо преимущество любого из этих решений в данном конкретном контексте в 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)
Versus:
# 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 in Ruby?