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方法。如图所示:
。
第一个例子也是工厂模式还是其他的东西,应该使用还是不使用?
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通过继承和多态性添加产品。您必须自己判断违反打开/关闭原则的简单性是否超过了潜在的可维护性。
实际上有两种工厂模式。第一个方法称为工厂方法,图片中显示的第二个方法称为抽象工厂。谈论工厂模式的人通常不知道其中的一个,或者不理解其中的区别。在这里描述这种差异是浪费时间的,所以我将向您指出这个问题,以便开始讨论。显然,互联网上还有很多。
代码片段中包含的是工厂方法。