Factoría Abstracta (Abstract Factory)

Cuando hablamos de programación. Hablamos de experiencia de miles, cientos de programadores que han pasado por la misma situación una y otra vez.

Personalmente, tiendo a buscar información sobre últimas tecnologías. Aunque, de vez en cuando hecho la vista atrás y repaso la bibliografía no tan actual como pueden ser los patrones de diseño. Que aunque no es actual, si es necesaria tener en mente cuando diseñamos cualquier aplicación o algoritmo.

Es hora, de intentar explicar el patrón de diseño Factoría Abstracta.

Introducción

Los patrones de diseño esta divididos en tres categorías: creación, estructural y de comportamiento.

El patrón factoría abstracta es un patrón de la categoría de “creación”. Este patrón es el encargado de crear familias de objetos relacionados, sin necesidad de especificar classes concretas.

Este patrón nos proporciona dos elementos indispensables:

  • Interfaz factoría: la cual sera implementada por las factorías concretas
  • Class abstracta: esta clase, contiene los fields communes en nuestra familia de objetos

Haciendo uso del poliformismo, podemos generar objetos concretos, mediante factorías concretas utilizando la interfaz y la clase abstracta.

Escenario

Tenemos una tienda de equipos informáticos y periféricos. Nuestro objetivos es hacer una aplicación donde, para empezar, gestionemos la venta de monitores (periférico).

Nuestro cliente, el cual puede ser un api rest (endpoint), no necesita saber qué monitor en concreto será creado, ni que factoría debe utilizar, tan sólo necesita la fabrica abstracta y el objeto monitor, el cual contendrá la información del objeto concreto.

La agrupación es objetiva, tanto podemos crear marcas, como en el ejemplo en github, como que sean resoluciones que devuelvan marcas, dependerá de cómo quieras agrupas estas familias de objetos.

Cuando usarlo

  • Cuando quieres proporcionar un tipo de clase de productos, y sólo quieres publicar sus interfaces y no sus implementaciones.
  • Nuestro sistema se basa en familias de productos
  • Estas familias se suelen utilizar conjuntamente.
  • El sistema tiene que ser independiente de como se crean sus clases concretas

Estructura

Actores implicados

FabricaAbstracta: interfaz para los métodos que crean los item abstractos

FabricaConcreta: implementa los métodos para crear objetos de los items concretos

Item Abstracto: interfaz de un tipo de un item concreto

Item Concreto: implementa item abstracto y define cómo se crea el objeto concreto por la fábrica.

Cliente: utiliza las interfaces “item abstracto” para utilizar las instancias generadas por la factoría

Algunas ventajas y unos inconvenientes

  • Difícil escalar los tipos de productos. Si queremos añadir un nuevo tipo de producto, como por ejemplo : “Hitachi”, será una tarea difícil de escalar .
  • La fabrica abstracta asegura la consistencia entre productos.
  • El cliente esta aislado de la creación de la Marca concreta.
  • Los products concretos son intercambiables.

Implementación

Referencias / Bibliografía

Amazon (inglés) – Design pattern

Casa del libro (

Deja una respuesta

A %d blogueros les gusta esto: