JavaScript de Cero a Experto / Patrones y observables
Factory: fábricas que deciden por ti
Llevas dos módulos fabricando cosas: closures con estado (módulo 12),
clases con new (módulo 11). El patrón factory les pone el marco: una
FUNCIÓN cuyo oficio es construir y entregar objetos listos — decidiendo
por dentro los detalles que quien pide no debería cargar. Es el patrón más
usado del ecosistema, y hoy le aprendes el criterio.
La cocina del menú ejecutivo
La factory con estado privado
La forma básica ya la dominas — es el closure del módulo 3 con traje de patrón:
Cada llamada fabrica un bolsillo independiente con SU mochila — mira que
no hay new, no hay this, no hay clase… y la privacidad es tan real
como la del #. Esta forma brilla para objetos pequeños y medianos; su
costo honesto: cada instancia carga sus propias copias de los métodos (lo
que las clases evitan con el prototipo, módulo 11) — con miles de
instancias pesa, con decenas da igual.
La factory que DECIDE: el patrón completo
El valor grande aparece cuando la fábrica elige la variante — el switch
vive en UN lugar y los que piden ni se enteran:
Este es el patrón que verás por todo el ecosistema: crearGasto es el
ÚNICO lugar que sabe qué variantes existen. ¿Llega mañana el
GastoCompartido? Tocas la fábrica y listo — los veinte lugares que
llaman crearGasto no cambian ni una letra. Compáralo con veinte
if (tieneDiaDeCobro) new GastoFijo(...) else new ... regados: el mismo
cambio serían veinte cirugías.
Factory vs class: el criterio
- Pocas instancias + privacidad simple + cero ceremonia → factory (configs, servicios, los "stores" que vienen en dos lecciones).
- Muchas instancias / jerarquías / instanceof / la memoria importa →
class(los datos del dominio: gastos, usuarios, enemigos del juego). - ¿Hay que DECIDIR la variante al construir? → una factory al frente,
aunque por dentro use clases y
new. Se combinan de maravilla.
Nota honesta: verás el nombre pomposo "Factory Method" con diagramas UML y jerarquías en libros de Java. En JavaScript, el 95% de las veces es lo de hoy: una función que fabrica. No dejes que el vocabulario te intimide — el mecanismo ya lo dominabas.
Tu app crea notificaciones en 14 archivos distintos con: nueva Alerta o nuevo Aviso según el nivel de urgencia (if repetido en los 14). Llega el tipo 'Crítica'. ¿Qué te habría ahorrado el dolor?
Mini-reto
Fabrica con decisión: una factory crearMovimiento(datos) que devuelva
un ingreso si datos.valor > 0 o un gasto si es negativo (cada variante
con su resumen() — flecha ▲/▼ como en el módulo 11 — y el gasto
guardando el valor en positivo). Aliméntala con un array mixto vía map,
imprime los resúmenes, y remata: agrega la variante "ajuste" (valor 0)
tocando SOLO la fábrica.
Qué sigue
Singleton para lo único, factory para lo variado. La próxima lección es LA joya del módulo (y del blueprint): el patrón OBSERVER — construir desde cero el sistema de suscripciones que está debajo de RxJS, de los signals de Angular y de medio ecosistema. El altavoz del colegio del módulo 8… ahora fabricado por ti, sin necesitar el DOM.