工厂模式实施变化

时间:2015-11-04 22:44:36

标签: 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

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

2 个答案:

答案 0 :(得分:1)

实际上有两种工厂模式。第一个称为工厂方法,图中显示的第二个是抽象工厂。谈论工厂模式的人通常不了解其中一个或者不了解其中的差异。在这里描述差异是浪费时间,所以我会指出你this这个问题要开始。互联网上显然有更多。

您在代码段中的内容是工厂方法

答案 1 :(得分:1)

  

但是真正的工厂模式不是你拥有一家工厂的模式   对于每种产品类型?

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

  

第一个例子是工厂模式还是其他东西,

第一个例子不是GoF模式,但它是常用的,通常称为Factory。您可能还会看到它称为简单工厂,或者如果方法是静态的,则为静态工厂,以区别于GoF。当GoF模式与相关(但非官方)编码习语之间没有区别时,混乱是猖獗的。

  

是否应该使用?

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