Seguimos con nuestra serie sobre “patrones de diseño” de software. En el último artículo hablamos sobre el patrón método fábrica. En el artículo de hoy nos centraremos en el patrón “Fábrica abstracta”, un “patrón de diseño creacional que te permite producir familias de objetos relacionados sin especificar sus clases concretas”.

¿Qué problema resuelve el patrón fábrica abstracta?

Un problema típico, propuesto por refactoring.guru, es el relacionado con un hipotético simulador de tienda de muebles. En este caso, tu código contiene clases representando una familia de productos: “Chair, Sofa, CoffeeTable” y variantes de esta familia, como pueden ser “Modern, Victorian, o  ArtDeco”.

Por tanto, necesitas una forma de crear muebles individuales para que coincidan con otros objetos de la misma familia. ¡Que el sofá combine con la silla! Y no quieres cambiar el código,  cada vez que se actualice el catálogo y se agreguen nuevos productos o familias de productos.

La propuesta del patrón Fábrica Abstracta es que declares explícitamente las interfaces para cada producto distinto de la familia de productos, y después hacer que todas las variantes de productos sigan esas interfaces. Las variantes de sillas pueden implementar la interfaz de silla.

¿Cuándo usar el patrón fábrica abstracta (Abstract Factory)?

Podrías utilizar “Fábrica Abstracta” cuando tu código deba funcionar con varias familias de productos relacionados, pero no quieres que dependa de clases concretas de esos productos, y deseas permitir la extensibilidad futura.

Cada clase debería ser responsable de una sola cosa. Por tanto, cuando una clase trata con múltiples tipos de productos, es buena idea extraer sus métodos de fábrica en una clase de fábrica independiente, o en una implementación completa de Fábrica Abstracta.

Pros y contras del patrón fábrica abstracta

Los siguientes son algunos de los “pros y cons” de este patrón:

Pros

Contras

  • Los productos de una fábrica son compatibles entre sí

  • Evitas el acoplamiento estrecho entre los productos concretos y el código del cliente

  • Principio de responsabilidad única. (Puedes extraer el código de creación del producto en un solo lugar, facilitando el soporte del código)

  • Principio Abierto/Cerrado. Puedes introducir nuevas variantes de producto sin romper el código del cliente. 

  • El código puede volverse más complicado de lo que debería ser, pues se introducen muchas nuevas interfaces y clases

“Show me the code”

Para que tengas una idea concreta, sobre el patrón fábrica abstracta, puedes ver este ejemplo en PHP de refactoring.guru.

En el ejemplo real verás que el patrón Fábrica Abstracta proporciona una infraestructura para crear varios tipos de plantillas para diferentes elementos de una página web.

¿Utilizas el patrón Abstract Factory en tus proyectos? ¿Qué tal la experiencia? ¡Coméntalo abajo!

Fuentes:

Compartir es construir