Patrones de diseño: Singleton

Comenzamos una serie de tutoriales cortos y sencillos para entender los diferentes patrones de diseño en el software. Comenzamos con Singleton


El objetivo del patrón Singleton es tener una única instancia de la clase en toda la aplicación.


Empezamos viendo un ejemplo en Java:


La clase debe tener un atributo que refiera a ella misma:

private static Class instance;

La clase debe tener un constructor vacío y privado, esto es para que no se puedan crear nuevos objetos desde cualquier parte de la aplicación, por tanto no debe tener más constructores que el privado:

private Class () { } 

Cómo no podemos crear un nuevo objeto a través del operador new, creamos un método que cree la instancia, y, que si la instancia ya estaba creada le devolverá al usuario la que estaba previamente creada.


public static Class getInstance () {
 if (instance == null) {
  instance = new Class();
 }
 return instance;
}

El resto de la clase puede tener los atributos que queramos, siempre que sean finales, y no se modifiquen. Como apunte, el método getInstance() debe ser static.


NOTA: Esta forma de crear Singleton, no es thread-safe, si quieres saber más al respecto, te dejo un enlace: https://medium.com/@cancerian0684/singleton-design-pattern-and-how-to-make-it-thread-safe-b207c0e7e368


Por ejemplo, puede ser útil para una conexión a BBDD, o sí por ejemplo, tenemos una lista de países para mostrar en nuestra aplicación, mostraremos la misma instancia de la clase Paises a los usuarios que accedan a la app, de esta forma ahorramos en memoria y mejoramos el rendimiento, debido a que esa clase no va a modificarse nunca.


En cuanto a nivel de frameworks, por poner un ejemplo, Spring gestiona todos sus beans (Service, Repository, Component, etc) como Singleton por defecto.


Espero que te haya gustado esta mini explicación de Singleton, y si te ha gustado comparte en redes sociales, nos vemos en el próximo artículo :)


528 vistas

©2020 por Juanma Perez.