建筑师设计模式的缺点

时间:2010-05-13 17:56:52

标签: java oop design-patterns builder

使用构建器设计模式的缺点是什么。有没有?

编辑 - 我想知道使用构建器设计模式是否有任何不良后果?正如GOF书中所述,他们提到了设计模式的好坏后果。但他们没有提到建筑师设计模式的任何不良后果。

5 个答案:

答案 0 :(得分:13)

它确实会在DTO中创建更多代码(并且可能会带来更多复杂性),而不是像例如构造函数参数和/或setter / getter那样。

在我看来,这不是什么大问题,在大多数情况下,没有太多额外的代码。如果您的对象具有一些必需参数和一些可选参数,那么构建器模式将非常值得。

答案 1 :(得分:10)

模式仅在模式被滥用/滥用时才是不利的。即该模式根本没有解决/适合实际的技术/功能问题。然后,您应该寻找另一种模式来解决特定问题。

这不是特别适用于构建器模式,而是一般设计模式。


更新:如果您有兴趣了解各种设计模式(特别是GoF设计模式中提到的那些)和Java API中的真实示例,那么您可能会发现这个回答:Examples of GoF Design Patterns in Java's core libraries很有用。它包含维基百科文章的链接,详细解释了模式。

答案 2 :(得分:4)

我是第二个Jarle的post

否则,当涉及到劣势时:

  • 如果必须使用例如Hibernate或JAXB映射DTO,则构建器模式不是很好的匹配。
  • 如果由于某些原因想要一个可变对象。
  • 对于有两个或三个字段的小型DTO,它只是开销,您应该使用一两个构造函数。除非您知道/相信DTO将来会包含更多字段。

答案 3 :(得分:3)

Builder模式,当与想法一起使用以克服Java中缺少可选参数时,您将丢失编译器提供的静态分析(以及IDE提供的所有良好的重构功能)。这意味着您将检测到某些必需参数仅在运行时丢失,而不是让您的IDE立即告诉您出现问题...

答案 4 :(得分:2)

与望远镜构造函数比较

  • 失去静态分析
  • 缺少必需参数a
  • 需要抛出异常并将其捕获
  • 如果你在构建器中使用盒装类型来表示尚未设置的原始值,那么会有很多自动装箱/拆箱 - 其中 允许很难发现的NullPointerExceptions。没有这样的 望远镜构造函数中的问题 - 你可以传递原始 值。
  • 更多代码