Patrones de Diseño: Singleton y Factory en JavaScript
Clase 4 de 26 • Curso de Node.js Avanzado
Resumen
Combinar patrones de diseño como Singleton y Factory permite resolver situaciones cotidianas en el desarrollo de software, garantizando eficiencia y claridad en la creación y manejo de objetos. En este ejemplo práctico, aprenderás cómo integrar estos dos patrones en JavaScript, creando un sistema útil para manejar logs en diferentes contextos como consola y archivo.
¿Qué es un Singleton y cómo implementarlo en JavaScript?
El patrón Singleton asegura que una clase tenga una única instancia en toda la aplicación, facilitando el control sobre recursos específicos, como pueden ser logs o conexiones a bases de datos.
Para crear un Singleton en JavaScript:
- Define una clase, en este caso
Logger
, con un método estático que compruebe si ya existe una instancia, y si no, la crea. - Crea un arreglo dentro de la clase para almacenar logs individuales.
- Implementa métodos específicos, como
log
para añadir mensajes con un timestamp ygetLogs
que retorna el arreglo completo de logs.
¿Cómo funciona el patrón Factory combinado con el Singleton?
El patrón Factory te brinda la facilidad de crear objetos de diferentes tipos según tus necesidades específicas de implementación. Cuando combinas Factory con Singleton:
- Creas un archivo de fábrica de logs (
loggerFactory.js
) que instancie diferentes logger (como consola o archivo). - En cada clase específica, como
ConsoleLogger
, encapsulas la instancia Singleton de Logger para garantizar la compartición eficiente de recursos. - Utilizas la Factory mediante un método estático
CreateLogger
para generar fácilmente instancias adaptadas al tipo requerido (consola o archivo).
¿Cómo llevar a cabo esta implementación práctica?
El procedimiento claro y sencillo para implementar esta combinación efectiva en JavaScript es:
- Crear la estructura de archivos, con logger.js como Singleton y loggerFactory.js como patrón Factory.
- Definir claramente cada clase involucrada como
ConsoleLogger
yFileLogger
, cada una con lógica individual adaptada. - Emplear un archivo
index.js
para importar, instanciar y utilizar concretamente estos objetos. - Solucionar posibles errores de implementación, como definir correctamente las instancias necesarias al importar objetos desde módulos.
Este ejercicio práctico te plantea además un desafío interesante para profundizar más en tu aprendizaje. Intenta completar la implementación para que el FileLogger
realmente almacene los mensajes en un archivo real y comparte tus logros en los comentarios.