Head First设计模式将简单工厂描述为
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;
}
}
与工厂方法模式和抽象工厂模式相比,简单工厂的缺点是什么?
在Gamma等人的设计模式中中,按工厂方法模式中的类对工厂方法进行参数化似乎类似于简单工厂。参数化的“抽象工厂”就是“简单工厂”是否正确? 设计模式是否提及参数化的抽象工厂?
答案 0 :(得分:1)
与工厂方法模式和抽象工厂模式相比,简单工厂的缺点是什么?
将工厂方法模式与抽象工厂模式进行比较并不完全正确,因为它们具有不同的用途。 Factory方法只是创建一个对象,而Abstract Factory Pattern定义了一个接口,您可以通过该接口创建对象族。如果我没记错的话,这两种都在您正在阅读的书中有描述。
回到简单工厂与工厂方法的缺点:在谈论设计模式时,总是一个问题,以及如何将它们应用于您的特定问题,这实际上取决于具体情况。
为每个要创建的对象类型都有一个工厂类会增加代码的复杂性,并且每个对象族附近都会有一个工厂类,因此很快您的代码就会因 Factory 类而爆炸。如果正确应用该模式,这是我所知道的唯一缺点。当然,另一方面,工厂方法也有其缺点。在两者之间进行选择时,我总是问自己,谁是代码的客户端,以及他更容易使用什么代码。
在Gamma等人的“设计模式”中,“工厂方法模式”中按类对工厂方法进行参数化的设置似乎与“简单工厂”相似。参数化的“抽象工厂”就是“简单工厂”是否正确?设计模式是否提及参数化的抽象工厂?
并非如此,但是AbstractFactory的具体工厂实现确实看起来像简单工厂。
我还建议您阅读其他文章,我个人的偏好是Zoran在抽象工厂上的帖子和讲座。在此处查看示例: http://codinghelmet.com/articles/cascading-abstract-factories
答案 1 :(得分:-1)
简单工厂:是包含从接口的子类创建对象的条件的类,简单工厂不是设计模式。
工厂:是很多实现一个接口的工厂,每个工厂负责创建一个对象。
抽象工厂与工厂相同,但每个工厂负责创建许多对象。