我已经对如何实现这个问题的标题进行了一些研究。我正在开发的应用程序已经开发了几年左右(虽然进展缓慢,你们都知道它在现实世界中的情况)。现在我需要加入 Undo/Redo 多级功能。现在说“你应该在开始之前考虑过这个”有点晚了......好吧,我们确实考虑过 - 我们对此没有采取任何行动,现在它就在这里。通过搜索 SO(和外部链接),我可以看到两种最常见的方法似乎是......
命令模式看起来会做很多工作,我只能想象它也会在这个过程中抛出数千个错误,所以我不太喜欢那个。
Memento 模式实际上很像我对此的想法。我在想如果有什么方法可以快速拍摄当前内存中的对象模型的快照,那么我就可以将它存储在某个地方(也许也在内存中,也许在文件中)。这似乎是一个好主意,我能看到的唯一问题是它如何与我们已经编写的内容集成。您会看到我们的应用程序,它在一个大面板(可能有数百个)中绘制图像,然后允许用户通过 UI 或通过自定义构建的属性网格来操作它们。整个应用程序与一个大的观察者模式相连。第二个任何变化,事件被触发,所有需要更新的东西都会发生。这很好,但我不禁想到,如果用户在属性网格上的 texfield 中输入文本,在 UI 赶上之前会有一点延迟(似乎每次用户按下一个键,都会添加一个新快照到撤消列表)。所以我对你的问题是......
- 您是否知道可能有效的 Memento 模式的任何好的替代方案。
- 您认为 Memento 模式是否适合这里,或者它会使应用程序变慢太多。
- 如果备忘录模式是要走的路,那么制作对象模型快照的最有效方法是什么(我正在考虑将其序列化或其他方式)
- 快照应该存储在内存中还是可以将它们放入文件中?
如果你已经走到这一步,谢谢你的阅读。您的任何输入都将是有价值的,非常感谢。