SyntaxHighlighter

lunes, 11 de noviembre de 2013

Diseño de patrones, Abstract Factory

Yo recomendaría que se mirara primero Factory Method.
Abstract Factory Method parece lo que dice, una abstracción del Factory Method donde se nos permite crear objetos de manera indirecta  Este patron parece subir un nivel más para crear de forma indirecta  factorias creadoras de objectos. Bien podría llamarse Meta Factory Method.

En http://en.wikipedia.org/wiki/Abstract_factory_pattern


hacer de la factoria un producto abstracto que pueda cambiarse y con el todos sus creaciones.
Aqui lo mismo. Se genera en función de la factoría creada se generarán una familia u otra de productos.

http://javapapers.com/design-patterns/creational-design-pattern/abstract-factory-pattern/
De aquel codigo se extrae el siguiente modelo.



Hecho de menos una variable que me haga accesible lo que produce Wonderland. Esta fabrica crea animales que ejecutan acciones....breath, pero no me da acceso a ellos. No puedo así utilizarlos en el resto de un cliente. Creo que la finalidad de la abstract factory, que es crear familias de productos, no se ve así cumplida. Yo imagino un código en el que hay una animal factory desperdigada que instancia diferentes factorias en funcion de alguna lógica. Vease el mismo código de uso de la página referida:

public class SampleAbstractFactory {
  public static void main(String args[]){
    new Wonderland(createAnimalFactory("water"));
  }
  public static AnimalFactory createAnimalFactory(String type){
    if("water".equals(type))
      return new SeaFactory();
    else
      return new LandFactory();
  }
}

la intención aquí es crear un wonderland. Yo me quedaría con el método createAnimalFactory(String type) que según reciba "water" o no creara Sharks o elefantes. Insisto Meta Factory Method.

http://howtodoinjava.com/2012/10/29/abstract-factory-pattern-in-java/

http://www.javapractices.com/topic/TopicAction.do?Id=128
http://www.allapplabs.com/java_design_patterns/abstract_factory_pattern.htm

No hay comentarios:

Publicar un comentario