与工厂方法模式和抽象工厂模式相比,简单工厂的缺点是什么?

时间:2019-06-12 18:26:13

标签: design-patterns factory

Head First设计模式将简单工厂描述为

enter image description here

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等人的设计模式中中,按工厂方法模式中的类对工厂方法进行参数化似乎类似于简单工厂。参数化的“抽象工厂”就是“简单工厂”是否正确? 设计模式是否提及参数化的抽象工厂?

2 个答案:

答案 0 :(得分:1)

  

与工厂方法模式和抽象工厂模式相比,简单工厂的缺点是什么?

将工厂方法模式与抽象工厂模式进行比较并不完全正确,因为它们具有不同的用途。 Factory方法只是创建一个对象,而Abstract Factory Pattern定义了一个接口,您可以通过该接口创建对象族。如果我没记错的话,这两种都在您正在阅读的书中有描述。

回到简单工厂与工厂方法的缺点:在谈论设计模式时,总是一个问题,以及如何将它们应用于您的特定问题,这实际上取决于具体情况。

为每个要创建的对象类型都有一个工厂类会增加代码的复杂性,并且每个对象族附近都会有一个工厂类,因此很快您的代码就会因 Factory 类而爆炸。如果正确应用该模式,这是我所知道的唯一缺点。当然,另一方面,工厂方法也有其缺点。在两者之间进行选择时,我总是问自己,谁是代码的客户端,以及他更容易使用什么代码。

  

在Gamma等人的“设计模式”中,“工厂方法模式”中按类对工厂方法进行参数化的设置似乎与“简单工厂”相似。参数化的“抽象工厂”就是“简单工厂”是否正确?设计模式是否提及参数化的抽象工厂?

并非如此,但是AbstractFactory的具体工厂实现确实看起来像简单工厂。

我还建议您阅读其他文章,我个人的偏好是Zoran在抽象工厂上的帖子和讲座。在此处查看示例: http://codinghelmet.com/articles/cascading-abstract-factories

答案 1 :(得分:-1)

  • 简单工厂:是包含从接口的子类创建对象的条件的类,简单工厂不是设计模式。

  • 工厂:是很多实现一个接口的工厂,每个工厂负责创建一个对象。

  • 抽象工厂与工厂相同,但每个工厂负责创建许多对象。