Trabajando mi camino a través del libro Head First Design Patterns.¿Cuándo es el método de fábrica mejor que simple de fábrica y viceversa?
Creo que entiendo la fábrica simple y el método de fábrica, pero estoy teniendo problemas para ver qué ventajas aporta el método de fábrica a la simple fábrica.
Si un objeto A utiliza una fábrica sencilla para crear sus objetos B, los clientes pueden crear de esta manera:
A a = new A(new BFactory());
mientras que si un objeto utiliza un método de fábrica, un cliente puede crear de esta manera:
A a = new ConcreteA(); // ConcreteA contains a method for instantiating
// the same Bs that the BFactory above creates, with
// the method hardwired into the subclass of A, ConcreteA.
Así, en el caso de la fábrica sencilla, los clientes componer una con una fábrica B, mientras que con el método de fábrica, el cliente elige la subclase apropiada para los tipos de B que desea.
Realmente no parece haber mucho para elegir entre ellos. O tiene que elegir con qué Fábrica B quiere componer A, o tiene que elegir la subclase correcta de A para obtener las Bs.
¿En qué circunstancias es mejor uno que el otro?
¡Gracias a todos!
Editar: Añadiendo un poco a la confusión IMO es la explicación dada en la narrativa de Head First donde pasan del método simple de fábrica al de fábrica diciendo (p.119) "las franquicias usaban su fábrica [simple] para crear pizzas , pero comenzando a emplear sus propios procedimientos propios para el resto del proceso: cocinarían las cosas un poco diferente ... "y tienen esa imagen de un chef que aparentemente hizo algo repugnante con sus pizzas.
Pero no hay nada sobre el uso de una fábrica simple que da a los clientes acceso al método de horneado() o cualquiera de las otras partes del proceso. Y no hay nada sobre el uso de un método de fábrica que ayudaría si hubiera algún problema con él.
por lo que parece a mí como la razón por la cabeza primero implica para el uso de un método de fábrica a través de una simple fábrica es falso ..
Veo su punto y me confundí con esto también. Creo que su punto es que cierto comportamiento se puede aplicar en las subclases al implementarlo en la clase base (abstracta). –