Когда я читаю фабричный паттерн Head First Design Patterns, я путаюсь, читая простую фабричную часть. Вот диаграмма классов.
![enter image description here](https://i.stack.imgur.com/oUVYK.png)
Код PizzaStore:
public class PizzaStore {
SimplePizzaFactory factory;
public PizzaStore(SimplePizzaFactory factory) {
this.factory = factory;
}
public Pizza orderPizza(String type) {
Pizza pizza;
pizza = factory.createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
// other methods here
}
код для SimplePizzaFactory
public class SimplePizzaFactory {
public Pizza createPizza(String type) {
Pizza pizza = null;
if (type.equals("cheese")) {
pizza = new CheesePizza();
} else if (type.equals("pepperoni")) {
pizza = new PepperoniPizza();
} else if (type.equals("clam")) {
pizza = new ClamPizza();
} else if (type.equals("veggie")) {
pizza = new VeggiePizza();
}
return pizza;
}
}
в франчайзинге части магазина пиццы, это говорит:
Если мы возьмем SimplePizzaFactory и создадим три разных
фабрики, NYPizzaFactory, ChicagoPizzaFactory и
CaliforniaPizzaFactory, тогда мы можем просто составить PizzaStore с
подходящая фабрика и франшиза - это хорошо.
в коде,
NYPizzaFactory nyFactory = new NYPizzaFactory();
PizzaStore nyStore = new PizzaStore(nyFactory);
nyStore.order(“Veggie”);
ChicagoPizzaFactory chicagoFactory = new ChicagoPizzaFactory();
PizzaStore chicagoStore = new PizzaStore(chicagoFactory);
chicagoStore.order(“Veggie”);
Мои вопросы: PizzaStore зависит от конкретного класса, который
SimplePizzaFactory, как мы можем создать экземпляр PizzaStore с экземпляром NYPizzaFactory или
Экземпляр ChicagoPizzaFactory?
Спасибо за все ваши ответы! В ответ на некоторые ответы, в случае, если новые ответы приходят таким же образом:
Некоторые упоминают AbstractFactory или интерфейс PizzaFactory. я знал
эта концепция, но эта концепция приходит позже в книге, как абстрактный
фабричный образец, после фабричного образца метода. Так что я не думаю
простая фабрика означает понятие, связанное с AbstractFactory.
NYPizzaFactory и ChicagoPizzaFactory расширяются
SimplePizzaFactory, да, конечно, но если авторы имеют в виду это, я не могу понять, почему они касаются контроля качества, как показано ниже:
Итак, вы протестировали идею SimpleFactory, и вы обнаружили, что
что франшизы использовали вашу фабрику для создания пиццы, но
начать использовать свои собственные процедуры для дома для остальных
процесс: они пекут вещи немного по-другому, они забывают резать
пицца, и они использовали сторонние коробки. Переосмысление проблемы
немного, вы видите, что вы действительно хотели бы сделать, это создать структуру
что связывает магазин и создание пиццы вместе, но все же позволяет
вещи остаются гибкими.