Lavorando attraverso il libro Head First Design Patterns.Quando il metodo di fabbrica è migliore della semplice fabbrica e viceversa?
Credo di capire la semplice fabbrica e il metodo factory, ma sto avendo difficoltà a vedere quale metodo vantaggi fabbrica porta oltre semplice fabbrica.
Se un oggetto Un utilizza una semplice fabbrica per creare i suoi oggetti B, quindi i clienti possono creare in questo modo:
A a = new A(new BFactory());
mentre se un oggetto usa un metodo di fabbrica, un client può creare in questo modo:
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.
Quindi, nel caso del semplice fabbrica, i clienti comporre una con una fabbrica B, mentre con il metodo factory, il cliente sceglie la sottoclasse appropriata per i tipi di B che vuole.
Ci realmente non sembra essere molto da scegliere tra di loro. O devi scegliere con quale BFactory vuoi comporre A, oppure devi scegliere la sottoclasse giusta di A per darti i Bs.
In quali circostanze è uno migliore rispetto agli altri?
Grazie a tutti!
Modifica: aggiungere un po 'alla confusione IMO è la spiegazione fornita nella narrazione di Head First in cui passano dal semplice metodo factory a factory dicendo (p.119) "i franchising stavano usando la tua [semplice] factory per creare pizze , ma comincia a impiegare le proprie procedure di produzione propria per il resto del processo: avevano cuocere le cose un po 'diverso .." e hanno quella foto di un cuoco che a quanto pare ha fatto qualcosa di disgustoso alle sue pizze.
Ma non c'è niente su come utilizzare una semplice fabbrica che offre ai clienti l'accesso al metodo di cottura() o una qualsiasi delle altre parti del processo. E non c'è niente nell'usare un metodo di fabbrica che possa essere d'aiuto in caso di problemi.
Quindi mi sembra la ragione Head First implica per l'utilizzo di un metodo factory per una banale fabbrica è falso ..
Vedo il tuo punto ed ero confuso da questo anche. Penso che il loro punto sia che determinati comportamenti possono essere applicati nelle sottoclassi implementandole nella classe base (astratta). –