Implementación de patrones Singleton y Factory en JavaScript
Clase 3 de 26 • Curso de Node.js Avanzado
Resumen
Dominar patrones de diseño como Singleton y Factory en JavaScript aporta estructura y eficiencia a tus aplicaciones. Ambos patrones son ampliamente utilizados, cada uno con características únicas que vale la pena comprender a profundidad.
¿Qué es el patrón Singleton en JavaScript?
El patrón Singleton permite garantizar que una clase tenga una única instancia en toda la aplicación. Cuando se intenta crear múltiples objetos, Singleton entrega siempre la misma instancia del objeto, asegurando eficiencia y consistencia en la gestión de recursos.
¿Cómo implementar un Singleton?
Implementarlo es sencillo con unos pasos clave:
- Primero, define una clase Singleton, verificando si existe ya una instancia.
- Retorna la instancia existente si ya fue creada.
- Crea una nueva instancia únicamente si no existe.
Observemos el ejemplo práctico explicado:
class Singleton {
constructor() {
if (Singleton.instance) {
return Singleton.instance;
}
Singleton.instance = this;
}
setName(name) {
this.name = name;
}
}
const singleton1 = new Singleton();
const singleton2 = new Singleton();
console.log(singleton1 === singleton2); // true
Como resultado, independientemente de cuántas veces invoques al constructor, siempre obtienes la misma instancia.
¿Qué es el patrón Factory y por qué usarlo?
A diferencia del Singleton, el patrón Factory permite instanciar múltiples objetos, diseñados a partir de una clase específica. Es ampliamente usado en frameworks y herramientas para simplificar el proceso de creación de objetos robustos sin exponer la lógica compleja detrás.
¿Cómo aplicar el patrón Factory en JavaScript?
Una implementación sencilla implica:
- Tener una clase base (por ejemplo, Pet).
- adicionar una clase separada (Factory) que maneje la instanciación de múltiples objetos.
Veamos un ejemplo claro:
class Pet {
constructor(name) {
this.name = name;
}
}
class PetFactory {
createPet(name) {
return new Pet(name);
}
}
const factory = new PetFactory();
const pet1 = factory.createPet("Firulais");
const pet2 = factory.createPet("Mishi");
console.log(pet1 === pet2); // false
Aquí queda claro que cada objeto tiene su propia identidad.
¿Qué aplicaciones prácticas tienen estos patrones?
- Singleton es ideal para gestionar estados comunes, configuraciones globales, conexiones a bases de datos o recursos compartidos.
- Factory te permite crear objetos flexibles y escalables en situaciones donde necesitas múltiples instancias pero sin exponer complejidad innecesaria.
Dominar estos patrones incrementa la calidad y organización en tu código y potencia el desarrollo eficiente dentro del ecosistema JavaScript. ¿Has utilizado anteriormente alguno de estos patrones en tus proyectos? Comparte tu experiencia con nosotros.