Pues comenzamos con el primer patrón de la serie Patrones de Diseño. Como dije en la introducción, comenzamos con el patrón Singleton.
Propósito
Asegurar que una clase sólo tiene una instancia y proporcionar un punto global de acceso a ella.
Motivación
Es importante que algunas clases tan solo tengan una sola instancia. Por ejemplo, puede haber varias impresoras en un sistema pero solo debería existir una cola de impresión. Pero. ¿Cómo podemos asegurar que una clase tiene una sola instancia y que esa instancia es fácilmente accesible? La mejor solución es hacer que la clase sea responsable de su instancia. La clase debe asegurarse de que no se puedan crear más instancias y debe proporcionar una forma de acceder a su instancia.
Aplicabilidad
El patrón Singleton se usa cuando:
- Debe haber exactamente una única instancia de una clase y los clientes deben poder acceder desde un punto de acceso fiable.
- La instancia debería ser extensible mediante subclases y los clientes deberían poder usar una instancia sin modificar su código.
Estructura
La clase Singleton define la operación instance() que permite a los clientes acceder a la única instancia de la clase. Los clientes sólo pueden acceder a esa instancia a través de esa operación.
Para que se entienda mejor usaré un ejemplo que podría ser real:
Ejemplo de la estructura e implementación del patrón Singleton
Consecuencias
Los beneficios de este patrón son los siguientes:
- Acceso controlado a la instancia: Debido a que la clase Singleton encapsula su instancia, puede tener un control de cuándo y cómo los clientes acceden a ella.
- Reduce el número de variables: El patrón Singleton evita tener variables globales que sólo guardan instancias de clases.
- Permite cambiar el número de instancias: Este patrón facilita que se añadan más instancias de la clase Singleton en caso de que ya no queramos solo una. Además, se puede controlar el número de instancias que se usan. Lo único que hay que cambiar en la operación instance()
Usos conocidos
En java existen varias clases singleton. Una de ellas es la clase Runtime que no tiene constructores públicos y se obtiene su única instancia llamando al método getRuntime().
Pues esto ha sido todo. Hemos comenzado con un patrón sencillo pero poco a poco iremos añadiendo nuevos patrones.
El artículo Patrones de Diseño. Patrón Singleton apareció por primera vez en Instinto Binario.