撤消和重做-清华大学计算机考研经验贴.

时间:2024-07-15 10:06:06
【文件属性】:

文件名称:撤消和重做-清华大学计算机考研经验贴.

文件大小:8.5MB

文件格式:PDF

更新时间:2024-07-15 10:06:06

javasc

9.5 撤消和重做 上一节我们讨论了如何撤销一个命令。很多时候,我们需要撤销一系列的命令。比如在一个 围棋程序中,现在已经下了 10 步棋,我们需要一次性悔棋到第 5 步。在这之前,我们可以把所 有执行过的下棋命令都储存在一个历史列表中,然后倒序循环来依次执行这些命令的 undo操作, 直到循环执行到第 5 个命令为止。 然而,在某些情况下无法顺利地利用 undo操作让对象回到 execute之前的状态。比如在一个 Canvas 画图的程序中,画布上有一些点,我们在这些点之间画了 N 条曲线把这些点相互连接起 来,当然这是用命令模式来实现的。但是我们却很难为这里的命令对象定义一个擦除某条曲线的 undo操作,因为在 Canvas 画图中,擦除一条线相对不容易实现。 这时候 好的办法是先清除画布,然后把刚才执行过的命令全部重新执行一遍,这一点同样 可以利用一个历史列表堆栈办到。记录命令日志,然后重复执行它们,这是逆转不可逆命令的一 个好办法。 在我编写的 HTML5 版《街头霸王》游戏中,命令模式可以用来实现播放录像功能。原理跟 Canvas 画图的例子一样,我们把用户在键盘的输入都封装成命令,执行过的命令将被存放到堆栈 中。播放录像的时候只需要从头开始依次执行这些命令便可,代码如下: 图灵社区会员 balabala233 专享 尊重版权


网友评论