jueves, 30 de octubre de 2014

Método de Fabricación ( Factory Method )

¿Que es?
el patrón de diseño Factory Method consiste en utilizar una clase constructora (al estilo del Abstract Factory) abstracta con unos cuantos métodos definidos y otro(s) abstracto(s): el dedicado a la construcción de objetos de un subtipo de un tipo determinado.

Parte del principio de que las subclases determinan la clase a implementar.

public class ConcreteCreator extends Creator

  {
  protected Product FactoryMethod()
      {
            return new ConcreteProduct();
      }
}
public interface Product{}
public class ConcreteProduct implements Product{}
      public class Client
      {
            public static void main(String args[])
            {
                  Creator UnCreator;
                  UnCreator = new ConcreteCreator();
                  UnCreator.AnOperations();
            }
      }

Fábrica Abstracta ( Abstract Factory )



El patrón de diseño Fábrica Abstracta se utiliza para proporcionar una interfaz común para crear una serie de objetos (productos) bajo una u otra arquitectura o framework, sin que los clientes de dichos productos tengan que tener conocimiento de la arquitectura elegida para implementar cada familia de productos.





Se pueden observar los siguientes partícipes:
  • FabricaAbstracta define el interfaz a cumplir por cualquier fábrica, es decir la creación de productos de diferentes tipos.
  • Fabrica1 y Fabrica2 son las clases concretas que fabrican los productos definidos en el interfaz para cada una de las familias.
  • ProductoAbstractoA y ProductoAbstractoB son los interfaces de los productos con independencia de las familias de los mismos, de este modo el Cliente puede manejar los productos sin conocer la familia del mismo.
  • ProductoA1ProductoA2ProductoB1 y ProductoB2 son los productos finales creados por las fábricas concretas (Fabrica1 y Fabrica2).
  • Cliente es la clase (o conjunto de ellas) que sin conocer las familias de productos (1 y 2) son capaces de interactuar con todos ellos (A y B), y de construirlos gracias al interfaz común de construcción de FabricaAbstracta.

Caso de ejemplo

En el siguiente ejemplo seguro que nos queda todo un poco más claro. Como puede verse se trata de proporcionar 2 tipos de arquitecturas para la creación de componentes visuales, uno con Motif y el otro con WxWidgets, los productos a crear son controles de Imagen y Texto: