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]

Grafical User Interface