jueves, 7 de febrero de 2013

Abstract Factory Pattern

  • Clasificación del patrón: creacional.
  • Intención: proporcionar una interfaz para crear familias de objetos relacionados o dependientes, sin especificar sus clases concretas.
  • También conocido como: Kit.
  • Problema: Se utiliza este patrón cuando se necesita
    • crear una familia de objetos relacionados, diseñada para ser utilizada en conjunto.
    •  que un sistema sea independiente de la forma en que sus productos son creados, compuestos o representados. 
    • que un sistema sea configurado con una de múltiples familias de productos. 
    • proporcionar una biblioteca de clases de productos, y sólo se quiere revelar sus interfaces, no sus implementaciones.
  • Solución: que el cliente delegue en otro objeto la creación de familias de objetos.
  • Estructura:
  • Participantes
    • AbstractFactory: declara una interfaz para la creación de productos abstractos. 
    • ConcreteFactory: implementa las operaciones para crear productos en concreto.
    • AbstractProduct: declara una interfaz para un tipo de producot en concreto.
    • Product: define un producto que será creado por un ConcreteFactory e implementa la interfaz AbstractProduct. 
    • Client: usa la interfaz declarada por el AbstractFactory y AbstractProduct.
  • Colaboraciones
    • Cliente-ConcreteFactory: generalmente  se crea una sola instancia de ConcreteFactory en tiempo de ejecución, que crea productos particulares. Para crear objetos de diferente tipo de producto, los clientes deben utilizar una ConcreteFactory diferente.
    • AbstractFactory aplaza la creación de objetos de productos para su subclase ConcreteFactory.
  • Consecuencias
    • Ventajas:
      • Aísla las clases concretas.
      • Facilita el intercambio de familias de productos.
      • Promueve la consistencia entre productos: un cliente utiliza sólo una familia de productos a la vez.
    • Desventaja: 
      • Es difícil dar cabida a nuevos tipos de productos, ya que se debe modificar la clase abstracta y todas las subclases para soportarlo.
  • Implementación
    • Las ConcreteFactories suelen implementarse como Singletons.
    • Si deben crearse muchas familias de productos, se puede aplicar el Prototype Pattern.
    • Las AbstractFactories definen un número finito de operciones creadoras de productos. Si se quiere agregar un producto de esta manera, es difícil, porque hay que cambiar la interfaz y todas las subclases. Una posible solución es tener un solo método y llamarlo para cada producto a crear.
  • Patrones relacionados
    • Las AbstractFactory se implementan a menudo con Factory Method, pero también puede ser implementado usando Prototype
    • Una ConcreteFactory es a menudo un Singleton.
  • Motivación

No hay comentarios:

Publicar un comentario