In Modelli di progettazione head-first, usano un esempio di pizzeria per dimostrare il modello di metodo di fabbrica.
public abstract class PizzaStore {
public Pizza orderPizza(String type) {
Pizza pizza;
pizza = createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
abstract Pizza createPizza(String type)
}
public class NYPizzaStore extends PizzaStore {
Pizza createPizza(String item) {
if (item.equals("cheese") {
return new NYStyleCheesePizza();
} else if (item.equals("veggie")) {
return new NYStyleVeggiePizza();
} else if (item.equals("clam")) {
return new NYStyleClamPizza();
} else if (item.equals("pepperoni")) {
return new NYStylePepperioniPizza();
} else return null;
}
}
Non capisco come questo modello non stia violando open-close. Cosa succede se abbiamo bisogno di una pizza di manzo, quindi dobbiamo modificare l'istruzione if nella classe NYPizzaStore.