všichni za jednoho, jeden za všechny
Ensure a class has only one instance, and provide a global point to access it.
V standardní instalaci knihoven je i implementace vzoru Singleton.
Avšak moduly mohou být také použity jako singleton objekty. Modul je v Ruby implementován jako objekt. Funkce modulu jsou implementovány jako metody instance objektu modul, a stav modulu je implementován jako proměnné instance objektu modul. Potom můžeme předa odkaz na modul stejně, jako odkaz na jiný objekt.
Singleton můžeme vytvořit za běhu programu. Můžeme to udělat například takto
MyObject = Object.new def MyObject.foo; ...; end def MyObject.bar; ...; end
nebo
MyObject = Object.new
class && MyObject
def foo; ...; end
def bar; ...; end
endDefinování funkcí modulu je jen komplikovaná cesta definováni metod singletonu. Například
module Mod
def jedna; end
def dve; end
module_function :jedna, :dve
endje jen zkratka pro
Mod = Module.new
class && Mod
def jedna; end
def dve; end
end
module Mod
private
def jedna; end
def dve; end
endclass SingletonClass
private_class_method :new
def SingletonClass.create(*args, &block)
@@singleton = new(*args, &block) unless @@singleton
return @@singleton
end
endrequire 'singleton'
class Singltn
include Singleton
def initialize
raise NotImplementedError
end;
end;
x = Singltn.instance;Sengleton podle C2 je vytvořen technologií Mixing. Instance singletonu se nevytvářejí voláním metody .new ale voláním .instance
# $Id: singleton1.ses,v 1.1 2003/11/19 23:54:35 radek Exp $require 'singleton'trueclass SClassinclude SingletonendSClass
