【发布时间】:2010-04-06 17:22:02
【问题描述】:
我正在用不可变对象构建一个完整的应用程序,这样多线程和撤消变得更容易实现。我正在使用Google Collections Library,它提供了 Map、List 和 Set 的不可变版本。
我的应用程序模型看起来像一棵树:
- Scene 是一个顶级对象,其中包含对根节点的引用。
- 每个节点都可以包含子节点和端口。
对象图可能如下所示:
Scene
|
+-- Node
|
+-- Node
|
+- Port
+-- Node
|
+- Port
+- Port
如果所有这些对象都是不可变的,由顶级 SceneController 对象控制:
- 构建此层次结构的最佳方法是什么?
- 如何替换对象树中任意深度的对象?
- 有没有办法支持反向链接,例如具有“父”属性的节点?
更一般地说:
- 是否出现了处理此类数据的任何模式?
- 是否有关于该主题的(学术)文献?
- 这是个好主意吗?
【问题讨论】:
-
你已经尝试过什么?为什么列出的 3 个问题中的每一个问题的简单解决方案对您来说都不够好?
-
我有自己的构造/替换实现,但我很想听听其他人遇到的模式。
-
您可能会发现获取 Chris Okasaki 的 Purely Functional Data Structures 副本很有用。
-
我已经多次看过 Stack Overflow 上提到的 Okasaki 书。好吗?有没有类似的 Java 书籍?
-
有一个 PDF 可用,但它并没有涵盖本书的所有内容。看看它。而且,据我所知,目前还没有关于为非函数式语言编写的函数式数据结构和技术的书籍,这很遗憾。
标签: java class-design immutability