Saltar al contenido
Hugo Teijiz

Biblioteca

Tecnología e IA aplicadaGuía · Avanzado · 7 min · Actualizado: 2026-06-08

Factory Method: crear objetos sin acoplar la decisión al flujo

Cómo Factory Method ayuda a encapsular la creación de objetos cuando el tipo concreto depende de contexto, canal o proveedor.

  • #gof
  • #factory-method
  • #arquitectura
  • #creacion-objetos

Resumen ejecutivo

  • Factory Method sirve cuando crear un objeto ya es una decisión de arquitectura.
  • El flujo gana estabilidad porque deja de conocer proveedores o clases concretas.

El problema real

El acoplamiento suele entrar por una línea inocente: new MercadoPagoClient(), new StripeClient(), new LocalNotifier(). Después aparecen más proveedores, más canales y más condiciones alrededor de la creación.

Cuando el flujo principal decide qué clase concreta instanciar, cada cambio de proveedor amenaza con tocar lógica que no debería cambiar.

Qué resuelve Factory Method

Factory Method encapsula la creación detrás de un método o función. El consumidor recibe una interfaz y no necesita conocer la clase concreta.

La decisión de creación sigue existiendo, pero queda ubicada en un punto explícito y testeable.

Cómo se ve en código

El flujo de pagos depende de un contrato. La selección del proveedor queda afuera.

payment-provider.ts
type PaymentProvider = { charge(amount: number): Promise<void> };

function createPaymentProvider(country: string): PaymentProvider {
  if (country === "AR") return new MercadoPagoProvider();
  return new StripeProvider();
}

async function checkout(country: string, amount: number) {
  const provider = createPaymentProvider(country);
  await provider.charge(amount);
}

Cuándo usarlo

Factory Method es útil cuando la creación depende de una decisión que probablemente cambie:

  • El proveedor depende de país, tenant, canal o configuración.
  • Querés testear el flujo con implementaciones falsas.
  • La clase concreta requiere setup o credenciales específicas.
  • Hay varios productos que cumplen el mismo contrato.

Cuándo evitarlo

Si siempre creás la misma clase y no hay variabilidad, una factory solo agrega indirección. Usala cuando la creación sea una decisión de arquitectura, no por costumbre.

Evidencia relacionada

FAQ

¿Factory Method es lo mismo que Abstract Factory?
No. Factory Method crea un producto detrás de un contrato. Abstract Factory crea familias de productos relacionados que deben ser consistentes entre sí.
¿Una función factory alcanza?
Muchas veces sí. En TypeScript o JavaScript, una función simple puede expresar Factory Method sin crear una jerarquía de clases innecesaria.

Artículos relacionados