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
- Instancia única: Sólo se permite una única instancia de la clase.
- Punto de acceso global: La instancia única es accesible desde cualquier lugar del sistema.
- 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:
- Gestión de configuración: Almacenar configuraciones globales accesibles desde cualquier parte de la aplicación.
- Controladores de recursos: Controladores de base de datos o manejadores de archivos donde se necesita un acceso coordinado.
- 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.
- Introducción a los Patrones de Diseño
- Fundamentos de JavaScript y ES6
- Patrón Singleton
- Patrón Factory
- Patrón Prototype
- Patrón Observer
- Patrón Module
- Patrón Revealing Module
- Patrón Mediator
- Patrón Decorator
- Patrón Command
- Patrón Strategy
- Patrón Template
- Patrón State
- Conclusiones y Buenas Prácticas en Patrones de Diseño