Design patterns 工厂模式中的参数化工厂-是否存在其他方式?

Design patterns 工厂模式中的参数化工厂-是否存在其他方式?,design-patterns,architecture,factory-method,Design Patterns,Architecture,Factory Method,我正在阅读Go4设计模式书,目前正在研究工厂方法模式。这本书在第110页提到 “工厂的另一个变化 模式允许工厂方法创建 多种产品 工厂方法接受一个 标识要创建的对象的类型 创建“ 工厂不总是生产多种产品吗?另外,是否总是需要发送一个参数来决定要创建哪种产品?我的意思是,如果我们不传递参数,工厂将如何决定创建哪个对象?他们所说的另一个变化是什么意思?我在这里遗漏了什么吗?我想他们谈论的是继承类型。因此,如果您将product作为父类和两个子类BetaProduct和FinishedProduct。

我正在阅读Go4设计模式书,目前正在研究工厂方法模式。这本书在第110页提到

“工厂的另一个变化 模式允许工厂方法创建 多种产品 工厂方法接受一个 标识要创建的对象的类型 创建“


工厂不总是生产多种产品吗?另外,是否总是需要发送一个参数来决定要创建哪种产品?我的意思是,如果我们不传递参数,工厂将如何决定创建哪个对象?他们所说的另一个变化是什么意思?我在这里遗漏了什么吗?

我想他们谈论的是继承类型。因此,如果您将product作为父类和两个子类
BetaProduct
FinishedProduct
。您可以告诉工厂要创建什么类型的对象,一个
BetaProduct
或一个
FinishedProduct
,只需简单地传入某种类型的参数即可更改工厂内的控制流。它将始终根据工厂拥有的信息设置对象上的值…但当它谈到产品种类时…即子类的名称/类型。

您的工厂可以从数据库或配置文件本身查找值,然而,这更可能是在工厂之外完成的,然后传入。

GOF可能会有点混乱,因为您有工厂和工厂方法。永远不知道哪个是哪个。没有全文,很难说出你在说什么

通常,只有您创建的工厂类型决定了方法返回的内容,例如,如果您有一个比萨饼工厂,不同的方法返回不同的比萨饼。但工厂决定创建哪些方法:每个方法都有一个特定的类型。当然,这在某种程度上是有限的,因为除了选择使用哪个工厂之外,您对创建的内容没有任何影响,但在使用此变体的框架中,这就是整个想法。工厂从你手中夺走了选择权,所以你没有选择的责任。基本上你是说‘把你所有的都给我’。给我任何意大利香肠披萨。但是工厂可以退回一个纽约辣味香肠比萨,或者一个超薄的辣味香肠比萨,这取决于你使用的是哪家工厂

在某些情况下,工厂更像是一种战略。你不想知道它是做什么的,但你仍然希望能够告诉它你想要接收哪种类型。类型应该有一个工厂可以使用的接口,或者工厂本身应该非常简单,不需要接口。这里你说‘给我一个这种类型的实例,做你通常对实例做的任何事情’。我想要这个比萨饼,外加奶酪


希望这能有所帮助。

那么,你的意思是总是有必要将参数传递给工厂?不,绝对没有。我想说,这取决于你们的工厂做什么,以及你们想如何定义它。如果它总是创建单一类型的对象…你不需要参数抱歉,但我不明白。如果一个抽象工厂只创建一种类型的对象,它会被认为是一个抽象工厂吗?@ck:你说的工厂之外是什么意思?在客户端代码中?可以吗?或者其他地方,比如工厂装载机类?