- ¿Qué es una base de datos? - noviembre 7, 2020
- ¿Es la programación una profesión para ti? - septiembre 3, 2020
- Temporada 2020-2021 - julio 15, 2020
Introducción
El patrón Singleton fue el primer patrón de diseño que yo utilicé, buscaba una forma en la que se garantizase que una clase sólo tuviera una única instancia. Esta es la justificación de que sea el primer patrón de diseño que he querido explicar en Time Of Software.
En el artículo voy a explicarte los conceptos básicos del patrón junto a un ejemplo práctico que he desarrollado para ti, además, al final del artículo podrás descargarte la plantilla del patrón, ¡para que la guardes en tu biblioteca personal!
Descripción y aplicabilidad
El patrón se encuentra dentro de los patrones de tipo creación, que son aquellos que abstraen el proceso de creación de instancias de los clientes que lo utilizan. Gracias al patrón singleton, podemos hacer un sistema independiente de la forma en la que se crean las instancias, además, también lo haremos independiente de la forma en la que se componen y representan las mismas. Esto es debido a que oculta, a los clientes, el proceso de creación y asociación de las instancias.
El patrón Singleton es aplicable en los siguientes escenarios:
- Únicamente debe de existir una instancia de una clase y debe ser accesible desde un punto conocido.
- La instancia única debe ser extensible por los clientes mediante herencia sin necesidad de modificar su código.
Estructura y participantes
El diagrama del patrón Singleton es el siguiente:
El patrón tiene un único participante, que es la clase Singleton:
- Define una operación estática que permite que los clientes accedan a su única instancia.
- Puede ser responsable de crear su única instancia.
¿Qué aporta?
El patrón Singleton aporta las siguientes ventajas en aquellas clases a las que quieras aplicarlo:
- Acceso controlado a la única instancia que existe de la clase ya que se encuentra encapsulada dentro de la propia clase.
- Reduce el espacio de nombres que utilizamos ya que evita no tener que usar variables globales que almacenen las instancias.
- El patrón permite fácilmente configurar un número variable de instancias, de 1 a N.
- Permite el refinamiento de operaciones.
- Mayor flexibilidad que las operaciones de clase.
En el aspecto negativo del patrón, hay que tener en cuenta los siguientes puntos:
- Los Singletons mantienen el estado hasta la finalización del programa.
- Promueve el acoplamiento fuerte entre clases
Implementación
¡Ha llegado el momento de que implementes tu primer Singleton!
A la hora de implementar el patrón tienes que tener en cuenta los siguientes puntos claves:
- El constructor de la clase tiene que ser privado para que nadie pueda instanciar.
- Tienes que crear un método público y estático para obtener la instancia de la clase.
- La clase tiene que ser un atributo estático de la propia clase.
- La única instancia debería ser extensible mediante herencia y los clientes deberían ser capaces de utilizar una instancia extendida sin modificar su código.
- Si utilizas entornos concurrentes debes asegurar la atomicidad del método para obtener la instancia de la clase.
Una vez que tienes claro cuáles son los puntos clave a la hora de implementar el patrón, te voy a poner un ejemplo simple desarrollado por mi utilizando Eclipse. El ejemplo consiste en una clase singleton que tiene encapsulada una cadena de texto, modificándola desde diferentes instancias puedes observar que el valor es compartido por ellas.
Proyecto
El proyecto es un proyecto de aplicación Java.
Clase Singleton
La clase Singleton es la principal, como puedes ver, esta clase implementa el patrón de diseño acorde a los puntos claves que te he contado antes. El contructor es privado y he creado un método público y estático que permite obtener la instancia de la clase, como puedes ver, la primera invocación al método GetInstance creará en el atributo de la clase el objeto, que será devuelto en las siguientes invocaciones.
He creado dos métodos para leer y escribir el valor de la cadena de texto para que puedas ver cómo funciona el patrón.
Clase Main
La clase Main es el programa principal de la aplicación de ejemplo que he creado. Puedes ver como creo dos objetos y ambos tienen la misma información, y puedes ver que si uno modifica la información de la cadena de texto esta es modificada para el otro también.
Ejecución
Al ejecutar la aplicación obtendrás la siguiente salida.
Resumen y conclusiones
Con este artículo ya puedes empezar a utilizar uno de los patrones de creación que más se utilizan en desarrollo de software. Es un patrón bastante sencillo y útil, que permite tener el control total sobre las instanciaciones de las clases.
Te animo a que pruebes a hacer el ejemplo que he puesto, y si tienes alguna duda ponte en contacto conmigo y te ayudaré con los problemas que encuentres o dudas que tengas.
¡Descárgate la plantilla del patrón!
*** Te suscribirás a la newsletter de forma automática