Capítulo 17. Métodos singleton

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

En este ejemplo, test1 y test2 pertenecen a la misma clase, pero a test2 se le ha redefinido el método size y por lo tanto se comportan de forma diferente. Un método que pertenece sólo a un objeto se conoce como método singleton.

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

Notas

[1]

Graphical User Interface