2014-11-16 69 views
1

我有一個很大的元素集合。 我想迭代它並累積一些特定的值(假設有10個值)。 我不知道是否有一個好的方法來做SW智能設計。迭代集合時的數據累積設計

我想積累數據,然後創建一個由累積數據(不可變對象)組成的最終對象。 有這樣的目的很好的設計模式嗎?

「Builder」在這裏並不好,因爲我想在迭代集合時更改這些值。

非常感謝!

回答

2

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

在構造函數中有很多參數時使用此模式,這使得在Java中調用和維護構造函數非常麻煩。當您想要在正在構建的類中保存不變量時,它尤其適用(否則,可以使用setter方法來配置類)。一種情況是,當你有不可變的對象時,你的情況就是這樣。

+0

我熟悉Builder。儘管構建器實際上並沒有積累數據,但它只是讓您在創建最終對象之前修改很多字段。我想在迭代集合的同時修改這些值 –

+0

@VitaliMelamud如果您有構建器,則可以在迭代時修改構建器對象中的值(可以將getter方法添加到構建器以實現此目的);當迭代完成後,可以讓構建器創建不可變對象。 –

+0

你認爲生成器中的獲取者是一個好主意嗎?沒有看到這種擴張在任何地方 –

1

建造者模式就是你要找的東西。您可以將累積的數據存儲到構建器對象中,並在完成後請構建器從其積累的所有內容中創建不可變對象。

沒有更具體的用例,很難給你一個更具體的例子。例如,參見here的這種模式。

+0

我熟悉Builder。儘管構建器實際上並沒有積累數據,但它只是讓您在創建最終對象之前修改很多字段。我想在迭代集合的同時修改這些值 –

+0

構建器會執行您想要的任何操作。如果ImmutableList的構建器(如我鏈接的構建器)沒有累積構建的不可變列表的所有元素,那麼如何工作? –

+0

這個例子確實很棒!但是,你認爲給用戶提供一個界面來設置構建器成員後修改構建器成員是個好主意 - 也就是說 - 對於整數成員,讓用戶爲其添加一些值,並讓他從中減去它... –