Para evitar link rot, el blog post of Chris Wanstrath vinculado por user83510 se vuelve a publicar a continuación (con su permiso). Aún así, nada mejor que un original, así que use su enlace mientras siga funcionando.
→ únicos Cantando 18 de de noviembre de 2008 Hay cosas que simplemente no entiendo. David Bowie, por ejemplo. O el Hemisferio Sur. Pero nada perturba mi mente como el Singleton de Ruby. Porque realmente, es totalmente innecesario.
Esto es lo que quieren que haga con su código:
require 'net/http'
# first you setup your singleton
class Cheat
include Singleton
def initialize
@host = 'http://cheat.errtheblog.com/'
@http = Net::HTTP.start(URI.parse(@host).host)
end
def sheet(name)
@http.get("/s/#{name}").body
end
end
# then you use it
Cheat.instance.sheet 'migrations'
Cheat.instance.sheet 'yahoo_ceo'
Pero eso es una locura. Luchar contra el poder.
require 'net/http'
# here's how we roll
module Cheat
extend self
def host
@host ||= 'http://cheat.errtheblog.com/'
end
def http
@http ||= Net::HTTP.start(URI.parse(host).host)
end
def sheet(name)
http.get("/s/#{name}").body
end
end
# then you use it
Cheat.sheet 'migrations'
Cheat.sheet 'singletons'
Cualquier
por qué no?La API es más conciso, el código es más fácil de probar, simular y resguardar, y aún es muy fácil convertirlo en una clase adecuada si surge la necesidad.
((copyright ought ten chris wanstrath))
¿Por qué es este tipo de singleton más eficiente? – xuuso