【发布时间】:2014-01-14 23:36:37
【问题描述】:
我已经阅读了工厂方法,其中子类创建所需的对象,抽象工厂具有具体类创建所需对象的方法
工厂方法
public class PizzaStore {
public Pizza orderPizza(String type) {
Pizza pizza = createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
}
abstract Pizza createPizza(String type);
}
public NewYorkPizzaStore extends PizzaStore {
public Pizza createPizza(String type) {
Pizza pizza = null;
if("cheese".equals(type)) {
pizza = new CheesePizza();
}
else if("onion".equals(type)) {
pizza = new OnionPizza();
}
return pizza;
}
}
public class pizzaTestDriveByFactoryMethod() {
public static void main(String args[]) {
PizzaStore ps = new NewYorkPizzaStore();
ps.orderPizza("cheese");
}
}
使用工厂
public class NewYorkPizzaFactory extends PizzaFactory {
public Pizza createPizza(String pizza) {
Pizza pizza = null;
if("cheese".equals(type)) {
pizza = new CheesePizza();
} else if("onion".equals(type)) {
pizza = new OnionPizza();
}
return pizza;
}
}
public class PizzaStore {
PizzaFactory factory;
public PizzaStore(PizzaFactory factory) {
this.factory = factory
}
public Pizza orderPizza(String type) {
Pizza pizza = factory.createPizza(type)
pizza.prepare();
pizza.bake();
pizza.cut();
return pizza;
}
}
public class pizzaTestDriveByAbstractFactory() {
public static void main(String args[]) {
PizzaFactory nwFactory = new NewYorkPizzaFactory();
PizzaStore ps = new PizzaStore(nwFactory);
ps.orderPizza("cheese");
}
}
使用工厂方法和抽象工厂实现的相同用例。为什么应该有 FactoryMethod 而不是使用 Abstract Factory 或 Utility Factory(例如 Chicago Factory/NewYorkFactory)。什么情况下工厂方法对抽象方法有用?
【问题讨论】:
-
这里有问题吗?
-
我已经看到提供的链接。但我不明白为什么要使用 factoryMethod 而不是 AbstractFactory。
-
你和我的工厂有非常相似的问题。我们都阅读了 HF 设计模式,创建模式,但并不理解它们。但对我来说还有一件事不清楚,这就是这两种模式与本书同一章节中定义的简单工厂习语之间的区别(以及它的示例 SimpleFactory 类)。在工厂成语(p.118/119)的结尾,他们说你可以用 NYPizzaFactory 或 ChPizzaFactory 代替 SimpleFactory - 对我来说这听起来像抽象工厂?
-
这里csc.columbusstate.edu/woolbright/java/factory.html 有HF 设计模式的摘录,这里stackoverflow.com/questions/20848082/… 链接到我的问题。
标签: java design-patterns abstract-factory factory-method