【问题标题】:Doubts regarding the use of factory function in java关于java中使用工厂函数的疑惑
【发布时间】:2011-10-17 12:25:32
【问题描述】:

我刚学java。我的一位同事说直接调用类不是一个好主意,他让我使用工厂方法来创建它。我对此有一些疑问:

  1. 为什么我们需要一个工厂函数而不是直接创建类?
  2. 它有什么用?
  3. 这会消耗对象创建吗?

【问题讨论】:

  • 也许不符合 Stack Overflow 的精神,但你不能试着问问说你应该这样做的同事吗?围绕团队分享知识至关重要,建立这种关系将帮助您更有效地提高技能,而不是每次遇到问题时都在网站上发帖。
  • 你为什么不问问你的同事?如果他有这样的意见(可能是好是坏,取决于上下文),他应该能够支持并解释它。
  • 是的,你们是对的,我可以问我的同事,但我认为 stackoverflow 可以比我的同事解释更多。我的意思是很多答案和很多观点。
  • ...工厂。如果不打算更换工厂,那它可能毫无用处。 “3. 这会消耗对象创建”是什么意思?啊,我明白了,你只想要一个“工厂方法”?如果你能以这种方式分解出通用代码,那可能是有道理的!

标签: java design-patterns


【解决方案1】:

您没有义务这样做。 您还可以创建工厂类。 看看这个链接了解this pattern的目的是什么

【讨论】:

    【解决方案2】:

    您应该这样做有几个原因。一些好的。有些不好。让我们从一个不好的理由开始:

    • 因为每个人都这么说。你的同事真的应该能够解释原因,你应该问他。然后判断他的理由。

    更好的理由:归结为单一责任原则(SOLID 的 S)

    如果你有一个类 A 并且实例化了一个类 B 并调用了该实例,这确实是一个强烈的暗示,表明你已经结合了两个职责。 (创建和调用或换种说法:决定谁应该做某事并让它去做)。

    对此的补救措施是在 A 之外创建 B 实例并将其放入 A。根据用例,您有不同的选择

    • 在 A 之外创建一个 B 并通过构造函数将其填充到 A 中。如果 A 在多个地方需要 B,而它恰好需要一个,那么这是正确的方法。

    • 在 A 之外创建一个 B 并通过一些方法调用将其填充到 A 中。如果 A 需要 B(s) 进行单次交互,而在下一次交互中需要/接受不同的交互,则这是正确的方法。

    • 将工厂传递给 A 可以用来随意创建 B。这适用于 A 需要多个 B 的情况。

    所以这留下了一个问题:除了违反一个真正聪明的人提出的一些奇怪的规则之外,为什么直接使用构造函数而不是工厂这么糟糕?如果 A 通过调用 B 的构造函数来创建 Bs,则它需要知道 B 完成工作所需的一切,这可能是很多东西,并且涉及创建 Cs、Ds 和 Es 的必要性,这些 Cs、Ds 和 Es 本身具有需要创建的依赖项。 .. 我想你明白了。

    【讨论】:

      【解决方案3】:

      我能想到的原因之一是避免重复代码。您可能会将创建实例的相同代码分散开来,为避免这种情况,您可以使用此模式。

      【讨论】:

        【解决方案4】:

        一个可能的原因可能是收集您需要作为构造函数参数传递的对象是重复的,因此将此活动与实际构造相结合可以避免重复,而无需锁定新对象的属性的设置方式。

        【讨论】:

          猜你喜欢
          • 2014-04-30
          • 2019-10-03
          • 2011-11-27
          • 1970-01-01
          • 1970-01-01
          • 2022-01-21
          • 1970-01-01
          • 2015-08-20
          • 2014-08-17
          相关资源
          最近更新 更多