我看到很多人使用这样的东西并称之为工厂模式。
class Factory {
public IProduct Create (ProductEnum type) {
switch (type) {
case ProductAType:
return new ProductA();
case ProductBType:
return new ProductB();
}
}
}
但是,对于每种产品类型,您是否拥有一个工厂?因此,当您创建IProduct的新实现时,您必须创建一个新的工厂类并重新定义Create方法。像这张照片中的东西:
第一个例子是工厂模式还是其他东西,是否应该使用?
答案 0 :(得分:1)
实际上有两种工厂模式。第一个称为工厂方法,图中显示的第二个是抽象工厂。谈论工厂模式的人通常不了解其中一个或者不了解其中的差异。在这里描述差异是浪费时间,所以我会指出你this这个问题要开始。互联网上显然有更多。
您在代码段中的内容是工厂方法。
答案 1 :(得分:1)
但是真正的工厂模式不是你拥有一家工厂的模式 对于每种产品类型?
如果by,“真正的工厂模式”是指GoF 工厂方法模式,那么是:GoF模式声明“子类决定实例化哪个类。 “
第一个例子是工厂模式还是其他东西,
第一个例子不是GoF模式,但它是常用的,通常称为Factory。您可能还会看到它称为简单工厂,或者如果方法是静态的,则为静态工厂,以区别于GoF。当GoF模式与相关(但非官方)编码习语之间没有区别时,混乱是猖獗的。
是否应该使用?
你在GoF模式中看不到这样的成语的原因是它违反了open/closed principle。每次添加新产品时都必须修改相同的工厂类,而不是通过继承和产品添加产品。 GoF的多态性。你必须自己判断违反开放/封闭原则的简单性是否超过了潜在的可维护性。