欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

我喜欢构建器模式的三个原因

发布时间:2023/12/3 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 我喜欢构建器模式的三个原因 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

有三种方法可以用Java编程语言创建新对象:

  • 伸缩构造函数(反)模式
  • Javabeans模式
  • 建造者模式
  • 与其他两种方法相比,我更喜欢使用构建器模式。

    为什么?

    Joshua Bloch描述了构建器模式以及在Effective Java中使用它的好处。 他的工作非常出色,在这篇博客文章中,我将不再重复这些好处。

    取而代之的是,我将描述为什么我更喜欢构建器模式而不是伸缩构造器模式和Javabeans模式的三个其他原因。

    1.帮助您进行更好的设计

    使用伸缩构造函数模式或Javabeans模式意味着必须在创建实际对象之前创建所创建对象的属性。

    这可能是问题,也可能不是问题。

    如果使用外部服务获取创建对象的属性,则不会有问题。 但是,如果在创建“目标”对象的方法中创建了属性,则将出现问题。

    在后一种情况下,创建的对象的生命周期通常绑定到“目标”对象的生命周期。

    在这种情况下,构建器模式可以帮助您使用称为聚合的域驱动设计(DDD)模式。 Martin Fowler指定聚合模式如下:

    DDD聚合是域对象的群集,可以将它们视为一个单元。 一个示例可能是一个订单及其订单项,它们将是单独的对象,但是将订单(连同其订单项)视为一个单独的汇总很有用。

    构建器模式可以帮助您以将域模型划分为聚合的方式设计代码。 这意味着属于聚合的所有对象都是由聚合根对象(订单)创建的,并且只能通过聚合根对象进行访问。

    这将构造关系与逻辑关系移到它所属的位置。

    2.让你思考

    以传统方式编写代码很容易,因为您无需思考。 您所要做的就是编写将信息从一个地方复制到另一个地方的代码。 可能要花一些时间,但这对您来说不是问题,因为您处于舒适区。

    也许您只是想处理代码而不考虑自己在做什么。

    我不是那样的人(你也不应该那样)。

    构建器模式迫使您考虑对象。 更具体地说,它迫使您考虑以下事项:

    • 您必须找出对象的必需和可选属性。
    • 您必须确定生命周期绑定到所创建对象的生命周期的属性,并设计构建器以使其更加突出。
    • 您必须确定在创建对象后无法更新哪些属性(并将这些属性标记为最终属性)。
    • 您必须决定可以更新哪些属性,并找到更新它们的最佳方法。

    找到这些问题的答案有助于您编写更好的代码。 我可以保证,如果您花时间查找这些问题的答案,您的代码将比自动驾驶仪上编写的代码好得多。

    3.它可以帮助您创建特定于域的语言

    如果使用伸缩构造函数模式或Javabeans模式创建新对象,则很难在代码中添加业务含义。 您可以按照以下原则尝试改善情况:

    • 可以向构造函数参数添加业务含义的唯一方法是以适当的方式命名参数。 这很难做到,即使您做对了,结果也不是最佳的。
    • 如果使用设置器,则当然可以用一种添加设置器方法的方式来命名它们。 但是,您有多少次看到以该原理命名的setter方法?

    在100个对象中,有99个创建的对象只是没有意义的对象。 他们保存数据。 就这些。

    使用构建器模式时,可以通过命名构建器类的方法来创建用于创建新对象的域特定语言(DSL) 。 这可以帮助您在创建新对象的代码中添加业务含义。

    这就提出了一个问题:如何更新对象的属性?

    当然,您可能会很无聊,并使用setter方法来更新对象的各个属性。 但是您也可以做一些完全不同的事情。

    您可以将这些属性分为有意义的组,而不用更新单个属性,并且可以通过一种方法更新这些属性的值。 如果正确命名此方法,则可以创建DSL来更新现有对象的信息。

    这不是银弹

    布雷克•考德威尔(Blake Caldwell)表示, 对于构造器来说,构造器模式本质上不太容易错误 。 我同意他的观点。

    当您开始使用构建器模式时,首先要注意的是创建新对象的代码更易于编写和阅读。 但是,一段时间后,您可能还会注意到其他好处。 我知道我做到了。

    但是,重要的是要了解构建器模式不是灵丹妙药

    我认为, 没有人会因为一种最佳实践而遵循最佳实践 。 这也适用于构建器模式。

    如果您的对象只有几个构造函数参数,则使用构建器模式没有任何意义。 但是,由于此博客文章(以及Effective Java)中所述的好处,因此您每次必须创建新对象时都应考虑使用构建器模式。

    参考: Petri Kainulainen博客上我喜欢 JCG合作伙伴 Petri Kainulainen 的构建器模式的三个原因 。

    翻译自: https://www.javacodegeeks.com/2014/02/three-reasons-why-i-like-the-builder-pattern.html

    总结

    以上是生活随笔为你收集整理的我喜欢构建器模式的三个原因的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。