历史记录与操作回溯-清华大学计算机考研心得分享

9.5历史记录与操作回溯

在上一节中,我们讨论了如何撤销单个命令的操作。然而,在实际情况中,我们常常需要一次性撤销一系列的命令。以围棋程序为例,当我们需要一次性回到前几步时,我们可以通过将所有执行过的命令记录在一个历史列表中,并逆序执行这些命令的undo操作来实现。但是,并非所有情况都能轻松利用undo操作将对象恢复到之前的状态。比如,在Canvas画图的程序中,擦除一条曲线可能并不容易实现undo操作。这时,一个好的方法是清除画布,并重新执行之前的所有命令。这种操作可以通过历史记录堆栈来实现。记录命令日志,并重复执行它们,是逆转不可逆命令的一个有效方法。

在我编写的HTML5版《街头霸王》游戏中,命令模式也可以用于实现播放录像功能。和Canvas画图类似,我们将用户的输入封装成命令,并将执行过的命令存储在堆栈中。当需要播放录像时,只需按顺序执行这些命令即可。

pdf 文件大小:8.5MB