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



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

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

为了实现撤销-重做功能,我计划在场景中发生变化时保存此信息(如移动/绘制动作),并稍后复制此信息。

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

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

与其他技术相比,其中一种技术有优点/缺点吗?

人们使用图形工具的总体趋势是什么?

经典方法在四人组的"设计模式"中进行了描述。基本上,你会实现一个Command类,并将它派生为一个MoveCommand, RotateCommand,…每个实例存储执行该命令所需的信息(例如,移动元素时的deltax和delay)。命令执行后,将其存储在撤消队列中。当用户选择'undo'时,你在命令实例上调用另一个基本的undo(),这基本上是相反的(所以在我们的例子中它会通过-deltax和- delay移动)。这可以为任何命令实现。

虽然这种方法在实践中工作得很好,解决了大量的问题,但我自己的经验是,它也会导致一个脆弱的撤销/重做队列,因为一旦其中一个命令不能正确地处理"撤销"(或根本),就没有办法进一步撤销。

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

最新更新