工厂模式实施变化

Factory pattern implementation variations

我看到很多人使用类似的东西,称之为工厂模式。

1
2
3
4
5
6
7
8
9
10
class Factory {
    public IProduct Create (ProductEnum type) {
        switch (type) {
            case ProductAType:
                return new ProductA();
            case ProductBType:
                return new ProductB();
        }
    }
}

但真正的工厂模式不是每种产品都有一个工厂吗?因此,当您创建IProduct的新实现时,必须创建一个新的工厂类并重新定义create方法。如图所示:

enter image description here

第一个例子也是工厂模式还是其他的东西,应该使用还是不使用?


But isn't the real Factory pattern the one where you have one factory
for each product type?

如果"真正的工厂模式"是指gof工厂方法模式,那么是的:gof模式声明,"子类决定要实例化哪个类"。

Is the first example also Factory pattern or it is something else,

第一个例子不是GOF模式,但它是常用的,通常被称为工厂。您还可以看到它被称为简单工厂,或者如果方法是静态的,则可以看到静态工厂,以将其与GOF区分开来。当gof模式和相关(但非官方的)编码习惯用法之间没有区别时,混淆就变得十分严重。

and should that be used or not?

在GOF模式中,您不会看到这样的习惯用法的原因是它违反了打开/关闭原则。每次添加新产品时都必须修改同一个工厂类,而不是根据GOF通过继承和多态性添加产品。您必须自己判断违反打开/关闭原则的简单性是否超过了潜在的可维护性。


实际上有两种工厂模式。第一个方法称为工厂方法,图片中显示的第二个方法称为抽象工厂。谈论工厂模式的人通常不知道其中的一个,或者不理解其中的区别。在这里描述这种差异是浪费时间的,所以我将向您指出这个问题,以便开始讨论。显然,互联网上还有很多。

代码片段中包含的是工厂方法。