Patrón de Diseño Singleton

Share on Facebook1Share on LinkedIn0Tweet about this on TwitterShare on Google+0Email this to someonePrint this page

El propósito del patrón de diseño Singleton es garantizar que una clase sólo tiene una instancia y que esta instancia proporciona un punto de acceso global a ella.

Es importante que algunas clases tengan exactamente una instancia. Tomemos como ejemplo las impresoras de una oficina, aunque puede haber muchas impresoras en un sistema sólo puede haber una cola de impresión de la impresora. En un sistema operativo sólo debe haber un sistema de archivos y un gestor de ventanas.

¿Cómo nos aseguramos de que una clase tiene sólo una instancia y que la instancia es de fácil acceso? Una variable global hace que un objeto sea accesible, pero no le impiden crear instancias de varios objetos.

Una mejor solución es hacer que la clase por si misma sea responsable de mantener el seguimiento de su única instancia. La clase  puede garantizar que ninguna otra instancia se puede crear (mediante la interceptación de solicitudes para crear nuevos objetos), y puede proporcionar un camino de acceder a la instancia. Esta solución se conoce como el patrón Singleton.

¿Cuándo utilizar el patrón Singleton?

Usar el patrón Singleton cuando:

  • Debe haber exactamente una instancia de una clase, y debe ser accesible a los clientes desde un punto de acceso bien conocido.
  • Cuando la única instancia debe ser extensible por medio de subclases, y los clientes deben ser capaces de utilizar una instancia extendida sin modificar su código.

Estructura

El patrón Singleton se define a través de una clase que define un método estático Instancia que permite a los clientes acceder a su instancia única. Además la clase Singleton debe ser responsable de la creación de su propia y única instancia.

Beneficios

  1. Acceso controlado a única instancia. Dado que la clase Singleton encapsula su única instancia, puede tener un estricto control sobre cómo y cuando los clientes acceden a él.
  2. Reducido espacio de nombre. El patrón Singleton es una mejora con respecto a las variables globales. Evita la contaminación del espacio de nombres con las variables globales que almacenan casos individuales.
  3. Permite el perfeccionamiento de las operaciones y la representación. La clase Singleton puede tener subclases, y es fácil de configurar una aplicación con una instancia de esta clase extendida. Usted puede configurar la aplicación con una instancia de la clase que necesita en tiempo de ejecución.
  4. Permite un número variable de instancias. El patrón hace que sea fácil cambiar de opinión y permitir más de una instancia de la clase Singleton. Además, puedes utilizar el mismo método para controlar el número de instancias que utiliza la aplicación. Sólo la aplicación que permite el acceso a la instancia Singleton necesita cambiar.
  5. Más flexible que métodos de clase. Otra manera de empaquetar una funcionalidad Singleton es utilizando métodos de clase.

Implementación

Para implementar el patrón Singleton debes seguir las siguientes pautas:

    1. Crear una clase teniendo en cuenta la estructura que se ha explicado con anterioridad, teniendo un método que asegure la creación de una única instancia.

    1. Luego debes implementar la llamada al método estático de la instancia de la clase Singleton, por el cual el clientes accederá exclusivamente a la única instancia.

Usos conocidos

Un ejemplo del patrón Singleton es la relación entre las clases y sus metaclases. Una metaclase es la clase de una clase y cada metaclase tiene una instancia. Las metaclases no tienen nombre (salvo de manera indirecta a través de su única instancia), pero estos no pierden de vista su única instancia y no crean otra.

Este patrón es implementado por otros patrones como Abstract Factory, Builder y Prototype.

_____________________

Para descargar el artículo en formato PDF haz clic aquí: