【问题标题】:Design of data accumulation while iterating a collection迭代集合时数据累积的设计
【发布时间】:2014-11-16 08:25:51
【问题描述】:

我有很多元素。 我想迭代它并积累一些特定的值(比如说大约 10 个值)。 我想知道是否有一个明智的软件设计方法。

我想累积数据,然后创建一个包含累积数据的最终对象(不可变对象)。 是否有用于此目的的良好设计模式?

“生成器”在这里不好,因为我想在迭代集合时更改值。

非常感谢!

【问题讨论】:

    标签: java oop design-patterns collections software-design


    【解决方案1】:

    您可以使用Builder design pattern(我已经链接了一篇博文,但您可以通过 Google 找到大量信息)。

    当构造函数中有很多参数时使用此模式,这使得在 Java 中调用和维护构造函数很麻烦。当您想在正在构建的类中保留不变量时,它特别有用(否则,可以使用 setter 方法配置类)。一种情况是,当您拥有不可变对象时,就是您的情况。

    【讨论】:

    • 我对 Builder 很熟悉。虽然构建器实际上并不积累数据,但它只是让您在创建最终对象之前修改许多字段。我想在迭代集合时修改值
    • @VitaliMelamud 如果您有构建器,您可以在迭代时修改构建器对象中的值(您可以向构建器添加 getter 方法以方便此操作);完成迭代后,您可以让构建器创建不可变对象。
    • 您认为 Builder 中的 getter 是个好主意吗?在任何地方都没有看到这个扩展
    • @VitaliMelamud 有进入“主观”领域的风险 - 我已经在几个项目中完成了这个,结果很好 - 每个人都理解它并且没有维护此类代码的问题。
    【解决方案2】:

    构建器模式正是您所寻找的。您将累积的数据存储到构建器对象中,完成后,要求构建器根据其累积的所有内容创建不可变对象。

    如果没有您提供更具体的用例,很难给您提供更具体的示例。

    例如,请参阅here 的这种模式。

    【讨论】:

    • 我对 Builder 很熟悉。虽然构建器实际上并不积累数据,但它只是让您在创建最终对象之前修改许多字段。我想在迭代集合时修改值
    • 建造者做任何你想做的事。 ImmutableList 的构建器(例如我链接到的那个)如果没有累积要构建的不可变列表的所有元素,如何工作?
    • 这个例子确实很棒!但是您是否认为为用户提供一个界面来在设置构建器成员后修改它们是一个好主意 - 也就是说 - 假设对于一个 Integer 成员,让用户为其添加一些值并让他从中减去它...
    • 如果您的用例需要该功能,并且您认为这是设计该功能的最佳方式,为什么不呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    相关资源
    最近更新 更多