当前位置:  开发笔记 > 编程语言 > 正文

用Java创建状态历史

如何解决《用Java创建状态历史》经验,为你挑选了1个好方法。

我需要在Java应用程序中的几个操作中保存状态历史记录,稍后我可以重新加载以便在某个操作中恢复状态.换句话说,我有一个屏幕,它有一个与之关联的状态,我需要存储它以及历史记录中的任何更改,以便我可以随时恢复屏幕状态.这有点像'撤消',但不完全是因为两个状态之间的差异可能非常大,并且没有明确定义的动作可以改变状态.

让我用一个例子来解释一下:一个非常基本的屏幕状态可能只包含一个Map.在状态A中,该Map包含对"Object1"的引用,其中键"Key1"和"Object2"具有键"Key2".在状态B中,Map仍包含对"Object1"的引用,但"Object2"已被修改并且已添加"Object3".我现在需要能够返回到状态A,这将涉及"丢弃"Object3并将Object2恢复到其先前的状态.我无法定义任何自定义的"撤消操作",因为我不知道对Object2进行了哪些更改,甚至不知道Object2的类型是什么.此外,因为状态A和B中的Object2的引用保持相同,所以这些更改反映在状态A中,因此Object2与它不同.

我意识到最好的解决方案是实现克隆方法,但是因为我需要支持所有类型的对象(包括基元和标准集合),所以这是不可行的.我想过使用serializable,我会在状态转换发生后立即序列化Map,然后在需要时再反序列化它,但这似乎是一个非常难看的解决方案.

有没有人有其他想法?谢谢你,Ristretto



1> Chris Bunch..:

您是否尝试过观看Memento设计模式?它似乎特别适合您的问题.来自维基百科:

memento模式是一种软件设计模式,它提供将对象恢复到其先前状态的能力(通过回滚撤消).

同一页面也有一个带有Java实现的部分,因为你提到它是用Java实现的.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有