Patrón Abstract Factory

PUBLICADO: 2026-08-16
AUTOR: MANUEL PRIETO
Patrones de Diseño

💡 Ver Caso Práctico: Ejemplo Práctico del Patrón Abstract Factory

Abstract Factory es un patrón de diseño creacional que permite producir familias de objetos relacionados o dependientes entre sí, sin especificar sus clases concretas.

Propósito y Caso de Uso

Utiliza Abstract Factory cuando tu código deba trabajar con varias familias de productos relacionados (por ejemplo, componentes de UI para tema claro/oscuro, o clientes de notificación para distintos entornos) y necesites garantizar que los productos de una misma familia sean siempre compatibles entre sí. A diferencia del Patrón Factory Method, que crea un producto, Abstract Factory crea familias completas de productos.

Estructura del Patrón

  1. Productos Abstractos: Interfaces para cada tipo de producto de la familia (ej. Button, Checkbox).
  2. Productos Concretos: Implementaciones específicas por variante (ej. DarkButton, LightButton).
  3. Fábrica Abstracta: Declara un método de creación por cada producto abstracto.
  4. Fábricas Concretas: Implementan la fábrica abstracta produciendo una familia coherente de productos.
Cargando diagrama...

Flujo de Funcionamiento

  1. Selección: El cliente recibe (o resuelve) una fábrica concreta según el contexto (tema activo, entorno, región).
  2. Creación desacoplada: El cliente llama a los métodos de la fábrica (createButton(), createCheckbox()) sin conocer las clases concretas.
  3. Coherencia garantizada: Todos los productos creados por una misma fábrica pertenecen a la misma familia y son compatibles entre sí.

Ejemplos de Implementación Reales

Cuándo NO usarlo

Si solo tienes un producto que crear (no una familia relacionada), Abstract Factory añade complejidad innecesaria (YAGNIGlosarioYAGNI (You Aren't Gonna Need It)Principio de Extreme Programming (XP) que establece que un programador no debe añadir funcionalidad hasta que sea estrictamente necesario. Su objetivo es evitar la sobre-ingeniería (over-engineering), previniendo código para funcionalidades hipotéticas.Ver término completo →); usa Factory Method en su lugar.