首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >工厂模式实现变化

工厂模式实现变化
EN

Stack Overflow用户
提问于 2015-11-04 22:44:36
回答 2查看 864关注 0票数 2

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

代码语言:javascript
复制
class Factory {
    public IProduct Create (ProductEnum type) {
        switch (type) {
            case ProductAType:
                return new ProductA();
            case ProductBType:
                return new ProductB();
        }
    }
}

但是,真正的工厂模式不是每个产品类型都有一个工厂吗?因此,当您创建IProduct的新实现时,您必须创建一个新的工厂类并重新定义create方法。就像在这张照片里:

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-05 01:26:23

但是,真正的工厂模式不是每个产品类型都有一个工厂吗?

如果您所说的“真实工厂模式”指的是GoF Factory方法模式,那么是的: GoF模式声明,“子类决定要实例化哪个类”。

是第一个例子,也是工厂模式,或者是别的什么,

第一个示例不是GoF模式,而是常用的、通常称为工厂的模式。您可能还会看到它称为简单工厂( Simple ),或者如果方法是静态的,则称为静态工厂( static ),以区别于GoF。当不区分GoF模式和相关(但非官方的)编码成语时,混乱就很猖獗。

这是否应该被使用呢?

在GoF模式中看不到这样的成语是因为它违反了开放/封闭原则。每次添加新产品时,都必须修改同一个工厂类,而不是通过每个GoF的继承和多态性来添加产品。您必须自己判断违反开放/封闭原则的简单性是否大于潜在的可维护性。

票数 1
EN

Stack Overflow用户

发布于 2015-11-04 22:55:06

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33533517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档