【问题标题】:Java: Builder pattern vs. logical grouped objectsJava:构建器模式与逻辑分组对象
【发布时间】:2012-01-09 02:51:14
【问题描述】:

我阅读了this question,了解如何在 Java 中拆分大型构造函数。但我不太确定在我的情况下我该怎么做。该问题表明构建器模式是更好的方法,但同时有人在某个子句中说“仅当某些参数是可选的”。因为我的所有参数都是强制性的,所以我看不到构建器模式的任何优势。我只会冒忘记传递重要信息的风险。因此,我是创建新的逻辑分组对象的唯一选择,还是我错过了构建器模式的一些重要事实?只有在缺少东西的情况下,建筑商似乎才好?

【问题讨论】:

  • 我想你已经掌握了...

标签: java coding-style parameters constructor builder-pattern


【解决方案1】:

“因此,我是创建新的逻辑分组对象的唯一选择,还是我错过了构建器模式的一些重要事实?”

我的意见是:

是的。与抽象所需的工作量相比,在这种情况下使用 builder 并没有带来额外的好处。

在 cmets 中也提到:如果您为一个对象设置了太多参数,则可能是该对象做的太多了。

【讨论】:

    【解决方案2】:

    即使您的所有参数都是强制性的,构建器模式仍然有一些优势:

    1. 它更具可读性。如果你的构造函数有十个参数,那就很难了 记住哪个是哪个,尤其是如果其中很多是 0 或 null。

    2. 构建器可以传递给几种不同的方法 积累它需要的数据。如果其中一些数据,这很有用 存在于一个类中,一些存在于另一个类中。

    3. 如果您的某些参数是需要的列表或其他集合 在交付给施工人员之前进行组装, builder 可以在内部解决这个问题。他们还可以消除 一些防御性副本的需要,因为构建者知道 它不会泄漏任何这些对象。

    4. 构建器可以充当序列化代理,为您提供更多 控制您的序列化形式或 JAXB XML 形式 对象。

    也就是说,我的方法总是从一个普通的构造函数开始,只有在调用该构造函数会导致代码中出现大量混乱并且生成器添加的额外清晰度足以证明添加全新的课程。

    【讨论】:

      【解决方案3】:

      构造函数的许多参数也可能表明该类正在处理太多问题。建设者只有在有级联案例时才有意义:为男孩添加粗鲁的语言部分,为女孩添加购物清单。

      拆分关注点取决于:继承、通用参数化类、委托类,以及更重的逻辑分组对象。

      还要考虑是否可以编写测试用例。测试驱动开发在这里很有帮助。如果你需要模拟一个参数类,“依赖注入”将需要一个更抽象的参数类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-24
        • 2011-12-23
        • 2012-06-26
        • 1970-01-01
        • 1970-01-01
        • 2012-08-02
        • 1970-01-01
        相关资源
        最近更新 更多