El comportamiento de una instancia viene determinado por su clase, pero hay veces que sabemos que una determinada instancia debe tener un comportamiento especial. En la mayoría de los lenguajes debemos meternos en la problemática de crear otra clase e instanciarla sólo una vez. En Ruby se puede asignar a cada OBJETO sus propios métodos.
ruby> class SingletonTest ruby| def size ruby| print "25\n" ruby| end ruby| end nil ruby> test1 = SingletonTest.new #<SingletonTest:0x401c4604> ruby> test2 = SingletonTest.new #<SingletonTest:0x401c4514> ruby> def test2.size ruby| print "10\n" ruby| end nil ruby> test1.size 25 nil ruby> test2.size 10 nil |
Los métodos singleton se utilizan frecuentemente en los elementos de un interfaz gráfico de usuario (GUI[1]) cuando se deben realizar acciones diferentes cuando se pulsan botones diferentes.
Los métodos singleton no son únicos de Ruby, aparecen también en CLOS, Dylan, etc. Otros lenguajes como por ejemplo Self y NewtonScript, sólo tienen métodos singleton. A estos se les conoce como lenguajes basados en prototipos
[1] | Graphical User Interface |