关于在java中使用工厂函数的疑问

时间:2011-10-17 12:25:32

标签: java design-patterns

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

  1. 为什么我们需要工厂功能而不是直接创建类?
  2. 有什么用?
  3. 会消耗对象吗?

4 个答案:

答案 0 :(得分:1)

你没有义务这样做。 您还可以创建工厂类。 请查看此链接,了解this pattern

的目标是什么

答案 1 :(得分:0)

为什么要这样做有几个原因。一些好的。有些不好。让我们从一个错误的原因开始:

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

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

如果您有一个A类并且实例化一个B类并调用该实例,那么您确实强烈暗示您已经将两个职责合并在一起。 (创建和调用或以不同的方式表达它:决定谁应该做某事并让它做到这一点)。

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

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

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

  • 将工厂传递给A,A可以用来随意创建Bs。当A需要多个B时,这是合适的。

所以这就留下了一个问题:为什么直接使用构造函数而不是工厂是如此糟糕,除了违反由一个非常聪明的人提出的一些我们的规则?如果A通过调用B的构造函数来创建Bs,它需要知道B工作所需的一切,这可能是很多东西,并且需要创建Cs,Ds和Es,它们本身具有需要创建的依赖项。 ..我认为你明白了这一点。

答案 2 :(得分:0)

我能想到的一个原因是避免重复代码。你可能有相同的代码来创建实例展开,为避免这种情况,你可以使用这种模式。

答案 3 :(得分:0)

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