2011-10-17 71 views
2

我刚刚在学习java.one的同事说,直接调用这个类不是一个好主意,他让我使用工厂方法来创建它。我对此有一些疑问:关于在java中使用工厂函数的疑问

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

也许不是堆栈溢出的精神,但你不能试着问同事说你应该这样做吗?在团队周围进行知识共享是必不可少的,建立这种关系可以帮助您更有效地发展您的技能,使您在每次有问题时在网站上张贴。 – 2011-10-17 12:31:58

回答

1

你不一定这么做。 您也可以创建一个工厂类。 看看这个链接,了解this pattern的目标是什么

0

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

  • 因为大家都这么说。你的同事真的应该能够解释为什么,你应该问他。然后判断他的原因。

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

如果你有一个A类和实例化一个B类,并调用该实例它确实是一个强大的暗示你已经合并了两项责任。 (创建和调用或以不同的方式来说明:决定谁应该做些什么并让它做到这一点)。

的补救这是对外部创建的B实例,并把它放入A.根据不同的使用情况,你有不同的选择

  • 创建一个外部的B和东西它变成一个通过构造函数。如果A在多个地方需要B并且只需要一个B,那么这是正确的方法。

  • 在A外部创建一个B,并通过某种方法调用将其填充到A中。如果A需要单个交互的B(s)并且在下一个交互中需要/接受另一个交互,那么这是正确的方式。

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

因此,这让这样一个问题:为什么会这么差,直接使用构造函数,而不是工厂,除了一些违反规则weired一个很聪明的人竖起的?如果A通过调用B的构造函数来创建Bs,它需要知道B在完成其工作时需要的所有东西,这可能是很多东西,并且涉及创建Cs,Ds和Es,它们本身具有需要创建的依赖项。 ..我认为你看到了这一点。

0

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

0

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