Ho letto il libro Head First: Design Patterns, che ho trovato una buona introduzione ai modelli di progettazione. Tuttavia, ho una domanda su un reclamo che fanno nel Capitolo 4:Il modello di metodo di fabbrica è più flessibile di Simple Factory?
Essi definiscono il modello "Simple Factory" come segue (Java pseudocodice):
public abstract class Product
{
// Product characteristics
// Concrete Products should subclass this
}
public class SimpleFactory {
public Product createProduct(){
// Return an instance of some subclass of Product
}
}
public class Store {
SimpleFactory factory;
public Product orderProduct(){
Product product = factory.createProduct();
// Do some manipulation on product
return product;
}
}
La "Factory Method" è definito come segue (classe prodotto rimane la stessa e viene omesso):
public abstract class Store {
//Concrete Stores must subclass this and override createProduct()
public abstract Product createProduct();
public Product orderProduct(){
Product product = createProduct();
// Do some manipulation on product
return product;
}
}
Poi gli autori vanno a sostenere che il pattern Factory Method è molto più flessibile di semplice fabbrica, perché mentre Simple Factory è "un solo colpo affare con il metodo factory stai creando un framework che le le sottoclassi decidono quale implementazione deve essere utilizzata "(pagina 135).
Ora non capisco perché sia vero. Per come la vedo io, Simple Factory è, in un certo senso, leggermente flessibile rispetto al metodo Factory: è possibile creare una sottoclasse di Simple Factory (invece di sottoclasse lo Store) per ottenere sostanzialmente lo stesso comportamento. Se lo desideri, puoi perfino modificare il comportamento in fase di esecuzione! L'unico svantaggio di Simple Factory I potrebbe essere quando la creazione del prodotto dipende dalle variabili di stato della classe Store: è questo che gli autori chiamano flessibilità, o mi manca qualcosa?
E 'divertente, sembrano considerare sottoclasse prima SimpleFactory; poi scartano l'approccio a causa della mancanza di controllo di qualità (stavano usando un'analogia del negozio di pizza in tutto il capitolo). In seguito si afferma semplicemente che il metodo factory è un framework che consente molta più flessibilità rispetto a Simple Factory. Comunque, grazie per la tua risposta! La combinazione di ereditarietà/composizione è un po 'strana, ma sicuramente è super flessibile! –
Se si sottoclasse la fabbrica semplice, credo che ti stia dirigendo verso il modello della Fabbrica astratta. Larman ha chiamato Simple Factory nel suo libro * Applying UML and Patterns * come "una semplificazione del pattern Abstract Factory". Inoltre, se continui a leggere in Capo prima, troverai una sezione chiamata ** È un metodo di fabbrica in agguato all'interno della Fabbrica astratta? ** Freeman, Eric; Robson, Elisabeth; Bates, Bert; Sierra, Kathy (2004-10-25). Head First Design Patterns (Kindle Location 2319). O'Reilly Media. Edizione Kindle. – Fuhrmanator