如果我有两个单独的 "factories" 不扩展到抽象父工厂,它仍然是工厂模式吗?

If I have two separate "factories" that doesn't extend to an abstract parent factory, is it still a factory pattern?

这仍然被认为是工厂模式吗?我的客户知道他们需要哪个超类,所以他们也知道要使用哪个工厂。但是这些“工厂”并没有扩展到一个单一的抽象工厂,不像我的教科书上展示的那样,所以我有点困惑。

“不实施或扩展某些东西的工厂”和 'a batch o static methods' 之间并没有太多区别。

如果一条路通向无路,那它还是一条路吗?

如果水龙头没有连接水管,它还是水龙头吗?

这些都是有趣的哲学游戏。重点是:它看起来像一个工厂——它就是一个工厂。但它并没有做工厂应该做的事情。它没有任何意义。

一般来说,我建议完全摆脱工厂并直接将其中的方法添加到 class,如果没有任何目的,则将它们标记为 static曾在这里。这只是一种简化 - 您还没有解释问题的确切细节。 implements/extends 什么都没有的工厂不太可能,但有可能在这里搬家。

工厂的要点就是与静态方法完全一样,除了静态方法永远不能覆盖(实现)API,因为那不是java 有效。实例方法可以。因此存在工厂模式的原因:这样您就可以执行 class 级别的方法,但仍然会实现一些东西。

如果您的工厂没有实现任何东西,那么为静态方法编写容器只是一种笨拙、迂回的方式。

也许您会反驳说“我的教科书告诉我静态是不好的”- 我们真正开始深入挖掘一个更核心的原则,即如果您不理解它们,那么像这样精辟的格言是完全无用的。 None 这些规则实际上是绝对的。它们过于简单化;记忆良好编程习惯的助记符。 如果您将它们视为实际法律而不是方便记住实际做法的简短陈述,它们会误导您

例如,'static bad'?这实际上只是 'shared / global state is hard to test and usually pre-defining the global-ness of state at the level of an individual class whose state is being globalized tends to be a case where the author of said class is simply not imaginative enough.'.

的简化

是的,很啰嗦,更难理解。

无论如何,无论您的书试图告诉您什么,关于工厂的概念都没有非黑即白的观点。你有工厂吗?我不知道。 Java Lang Spec 没有在任何地方提到这个词,因此,这是一个精辟的词,试图描述一大堆属性,并且程序员之间没有完美的共识,即哪些属性,确切地说,这个词实际上需要。因此,尝试判断是否将其称为 'factory' 可能没有多大用处。没有绝对最终法则的神灵。

弄清楚您要完成什么以及哪种代码风格导致代码易于维护、易于阅读、易于其他程序员理解并且易于修改不断变化的要求。

无需抽象 class 级操作,工厂就是寻找问题的解决方案。