将中间系统状态存储为临时文件或字符串? (用于撤消/重做)

时间:2015-07-17 07:26:08

标签: algorithm user-interface graphics storage

我有一个图形系统,用户可以在其中绘制/编辑一些基本形状,如线条,贝塞尔等。

在任何情况下,我都有我的信息,我可以保存,以便以后重现场景。

要实现撤消 - 重做功能,我计划在场景发生变化时保存此信息(如移动/绘制操作),稍后再重现。

我已经有了以自定义格式将此信息导出为文件的功能。

我想知道将图纸的中间阶段存储为一系列临时文件是否是个好主意,或者我应该将这些信息存储为字符串列表。

这些技术之一的优点/缺点是否超过其他?

人们在图形工具中遵循的一般趋势是什么?

1 个答案:

答案 0 :(得分:1)

经典方法在"设计模式"来自四人帮。基本上,您将实现一个Command类,并将其派生为MoveCommand,RotateCommand,...每个实例都存储执行该命令所必需的信息(例如,移动元素时的deltax和deltay)。执行该命令后,将其存储在撤消队列中。当用户选择'撤消'时,你会在命令实例上调用另一个原语undo(),这基本上是相反的(因此在我们的例子中它会移动-deltax和-deltay)。这可以针对任何命令实现。

虽然这种方法在实践中运行良好并解决了大量问题,但我自己的经验是,它也会产生一个脆弱的撤销/重做队列,因为只要其中一个命令没有处理&# 39;撤消'正确地(或根本没有),没有办法进一步撤消。

您在每个步骤捕获绘图状态的建议将需要更多内存。作为交换,您根本不需要实现Command类来确保一切都可以撤消。