gpt4 book ai didi

java - 工厂方法与抽象工厂

转载 作者:行者123 更新时间:2023-12-01 13:40:50 24 4
gpt4 key购买 nike

我读过工厂方法,其中子类创建所需的对象,而抽象工厂具有具体类创建所需对象的方法

工厂方法

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)。工厂方法在什么情况下对抽象方法有用?

最佳答案

主要区别在于,您可以实现工厂对象,而无需对正在处理工厂的对象进行子类化。这也意味着您可以进行诸如即时交换工厂之类的事情。另一方面,如果您只是做一些简单或紧密耦合的事情,那么您不妨只提供更简单的方法。

关于java - 工厂方法与抽象工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20799645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com