Singleton vs. Monostate Pattern in Ruby

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

8
задан user2398029 2 January 2012 в 07:00
поделиться