我使用不可變對象構建整個應用程序,以便多線程和撤銷變得更容易實現。我正在使用提供Map,List和Set的不可變版本的Google Collections Library。如何操作不可變對象樹?
我的應用程序模型看起來就像一棵樹:
- 場景是包含一個根節點的引用的頂層對象。
- 每個節點可以包含子節點和端口。
對象圖可能是這樣的:
Scene
|
+-- Node
|
+-- Node
|
+- Port
+-- Node
|
+- Port
+- Port
如果所有這些對象是不可改變的,由頂級SceneController對象控制:
- 什麼是最好的方式構建這個層次?
- 我將如何替換對象樹中任意深度的對象?
- 有沒有一種方法可以支持反向鏈接,例如具有「父」屬性的節點?
更普遍:
- 有任何的型態出現了處理這種類型的數據?
- 有沒有關於這個主題的(學術)文獻?
- 這是個好主意嗎?
你已經試過了什麼?爲什麼針對3個列出的問題中的每一個問題的解決方案都不夠好? – Roman 2010-04-06 17:29:06
我有自己的構建/替換實現,但我很想聽聽其他人遇到的模式。 – Frederik 2010-04-06 17:37:04
您可能會發現獲得Chris Okasaki提供的Purely Functional Data Structures的副本很有用。 – 2010-04-06 17:49:14