Chuck's Academy

Patrones de diseño en JavaScript

Patrón Singleton

El patrón Singleton es uno de los patrones de diseño creacionales más simples y comunes. Su propósito es asegurarse de que una clase tenga una sola instancia y proporcionar un punto de acceso global a dicha instancia.

Características del Patrón Singleton

  1. Instancia única: Sólo se permite una única instancia de la clase.
  2. Punto de acceso global: La instancia única es accesible desde cualquier lugar del sistema.
  3. Control de instancia: La clase misma controla la creación y acceso a la instancia única.

Beneficios del Patrón Singleton

  • Control del acceso: Al tener una sola instancia, podemos controlar los recursos y coordinar acciones a través de esta instancia.
  • Reducción del uso de memoria: Evita la creación de múltiples instancias, reduciendo así el consumo de memoria.

Implementación de un Singleton en JavaScript

En JavaScript, podemos implementar un Singleton utilizando funciones o clases. Aquí mostramos cómo hacerlo utilizando la sintaxis de clases de ES6.

Ejemplo 1: Singleton con Clase

javascript

En este ejemplo, utilizamos una propiedad estática instance para almacenar la única instancia de la clase Singleton. Si ya existe una instancia, el constructor simplemente retorna esa instancia, asegurando que no haya múltiples instancias de la clase.

Ejemplo 2: Singleton con IIFE (Expresión de Función Ejecutada Inmediatamente)

Otra manera de implementar un Singleton es mediante una IIFE y el patrón de módulo.

javascript

En este enfoque, utilizamos una función autoejecutable para encapsular la creación de la instancia. La función devuelve un objeto con un método getInstance que crea y retorna la instancia única.

Casos de Uso del Patrón Singleton

El patrón Singleton es útil en varios escenarios, como:

  1. Gestión de configuración: Almacenar configuraciones globales accesibles desde cualquier parte de la aplicación.
  2. Controladores de recursos: Controladores de base de datos o manejadores de archivos donde se necesita un acceso coordinado.
  3. Logging: Un servicio de logging centralizado que se puede invocar desde cualquier módulo sin necesidad de crear múltiplas instancias.

Consideraciones y Buenas Prácticas

  • Evitar uso excesivo: El patrón Singleton, si se usa en exceso, puede acoplar demasiado ciertas partes de la aplicación, lo que dificulta la prueba y mantenimiento del código.
  • Uso en pruebas: En entornos de pruebas, asegúrate de que los Singletons no mantengan estado que pueda interferir con otros tests.
  • Lazy initialization: Considera inicializar la instancia solo cuando se necesite, para mejorar el rendimiento y reducir el consumo de recursos.

En el próximo capítulo, veremos otro patrón creacional muy útil: el Patrón Factory.


Pregúntame lo que sea