Supponiamo che una classe abbia bisogno di caricare una libreria esterna che richiede un po 'di tempo per essere caricata e quindi dovrebbe essere caricata una sola volta. Due soluzioni naturali a questo sarebbero usare il modello singleton o il modello monostatico. C'è qualche vantaggio per una di queste soluzioni in questo particolare contesto in Ruby?Singleton vs. Monostate Pattern in Ruby
Ad esempio:
# 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)
Dalla seconda sintassi è molto più pulito, vi sono eventuali vantaggi nell'utilizzo della Singleton in rubino?
Il metodo 'require' carica una libreria e ne impedisce il caricamento più di una volta. – steenslag
Mi riferivo specificamente a una libreria non Ruby, che non può essere gestita semplicemente da require, sebbene il tuo suggerimento indichi un terzo modo per ottenere la stessa cosa: 'Class Parser; @@ parser = load_external_library; def self.parse (frase); @@ parser.parse (frase); fine; fine' ... quindi in un altro file, 'richiede 'parser''. Questo sembra simile alla monostazione, ma il codice utente ora è responsabile di richiederlo solo una volta, che può essere [più complicato del previsto] (http://ghouston.blogspot.com/2007/05/ruby-require-idiom.html). qualche idea? – user2398029