我需要保存 Java 应用程序中一些操作的状态历史记录,以便稍后重新加载以恢复某个操作的状态。换句话说,我有一个屏幕,它有一个与之关联的状态,我需要存储它以及历史记录中的任何更改,以便我可以随时恢复屏幕的状态。这有点像“撤消”,但不完全是因为两个状态之间的差异可能非常大,并且没有明确定义的动作可以改变状态。
让我用一个例子来解释一下:一个非常基本的屏幕状态可能只包含一个地图。在状态 A 中,此 Map 包含对具有键“Key1”的“Object1”和具有键“Key2”的“Object2”的引用。在状态 B 中,地图仍然包含对“Object1”的引用,但“Object2”已被修改并添加了“Object3”。我现在需要能够返回到状态 A,这将涉及“删除”Object3 并将 Object2 恢复到之前的状态。我无法定义任何自定义“撤消操作”,因为我不知道对 Object2 进行了哪些更改,甚至不知道 Object2 的类型是什么。此外,由于在状态 A 和 B 中 Object2 的引用保持不变,因此这些更改会反映在状态 A 中,因此 Object2 与以前不同。
我意识到最好的解决方案是实现克隆方法,但是因为我需要支持所有类型的对象(包括原语和标准集合),所以这是不可行的。我考虑过使用可序列化,一旦发生状态转换,我会序列化 Map,然后在再次需要时反序列化它,但这似乎是一个非常丑陋的解决方案。
有人有其他想法吗?谢谢你,里斯特雷托