我看到很多人使用类似的东西并将其称为工厂模式。
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 模式中看不到这样的习惯用法的原因是它违反了 open/closed principle 。每次添加新产品时都必须修改相同的工厂类,而不是根据 GoF 通过继承和多态性添加产品。您必须自己判断违反开放/封闭原则的简单性是否超过了潜在的可维护性。
关于design-patterns - 工厂模式实现的变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33533517/