Una critica que algunos hacen al libro "Design Patterns: Elements of Reusable Object-Oriented Software" es que las implementaciones de los patrones ahi expuestos están pensados para lenguajes estáticamente tipados (Java, C++, ...) y no cubren los lenguajes dinámicos (Ruby, Lisp, ...)

Las implementaciones de patrones de diseño en lenguajes dinámicos son por lo general mucho más sencillas que las implementaciones de los mismos patrones en lenguajes estáticamente tipados, de hecho muchas de estas implementaciones son verdaderamente triviales en los lenguajes dinámicos (en algunos casos inclusive ya son parte del lenguaje).

Tengo como idea generar un catálogo en español de patrones de diseño en Ruby. Para esto me basaré en información ya existente (por ejemplo en RubyGarden).

Para comenzar hablemos del Singleton.

La idea del patrón de diseño Singleton es asegurar que solo exista una instancia para una clase dada, y además ofrecer un punto global de acceso para dicha instancia.

En Ruby para implementar un singleton en una clase basta con hacer un mix con el module singleton.

RUBY:
  1. require 'singleton'
  2.  
  3. class MiClase
  4.   include Singleton
  5. end

Al hacer el mix el método new se vuelve privado y se tiene acceso al método instance el cual devuelve la instancia singleton de la clase.

RUBY:
  1. irb(main):003:0> a = MiClase.new
  2. NoMethodError: private method 'new' called for MiClase:Class
  3.         from (irb):5
  4. irb(main):004:0> a = MiClase.instance
  5. => #<MiClase:0x30b1dc>
  6. irb(main):004:0> b = MiClase.instance
  7. => #<MiClase:0x30b1dc>

P.S: Peter Norvig hizo una buena presentación de patrones de diseño en programación dinámica (sin embargo no usa Ruby como ejemplo)


0 Respuestas a “Patrones de Diseño en Ruby :: Singleton”

  1. Ningún Comentario

Añade un Comentario





RSS feeds

Suscríbete a nuestros RSS Feeds