design-patterns - 工厂模式实现的变体

标签 design-patterns factory factory-method

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

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 模式中看不到这样的习惯用法的原因是它违反了 open/closed principle 。每次添加新产品时都必须修改相同的工厂类,而不是根据 GoF 通过继承和多态性添加产品。您必须自己判断违反开放/封闭原则的简单性是否超过了潜在的可维护性。

关于design-patterns - 工厂模式实现的变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33533517/

相关文章:

Javascript 创建具有 new 和不具有 new + 继承的对象

design-patterns - 工厂采用静态方法实现

Python:工厂属性

c++ - C++ 中的多态映射键

java - 如何抽象转换类型

java - 在Java中,如何实现类似使用模板参数的功能,避免在C++中创建Creator子类?

c# - 如何指示 Ninject 对给定类型的任何请求子类型使用工厂方法?

java - 如果在引用类之前不调用静态初始化程序,如何注册 java 类

java - 解析器的设计模式

python - 有没有一种简单、优雅的方式来定义单例?