undo/redo功能的原理和思路
一些具有操作记录的系统,如店铺装修、富文本编辑等,都具有undo/redo功能,可实现界面操作过程的撤销和恢复,简述开发undo/redo功能的原理和思路。
undo是将用户上一步做的操作对程序造成的改动恢复到改动之前,而redo操作是指重新实现这种改动。
undo/redo操作的实现方式分为两类:记录数据和记录操作。
记录数据是指将信息编辑窗口打开时,保存原始数据,然后记录用户每次操作后的结果数据,这里的数据是指信息编辑窗口中所有可能发生变动的数据。做undo操作时程序将用户上一步操作前的数据传给信息编辑窗口相应控件。这种做法是以空间来换时间,程序不必考虑用户到底改变了哪些数据,反正每次都是替换的所有可能改变的数据。当每次保存的数据量比较小时,这种做法比较方便快捷,但是如果数据量大,比如包括图形、视频信息等,这种方法就比较耗费内存了。
记录操作是指信息编辑窗口打开后,记录用户每次的操作,包括具体的操作动作以及操作改变的数据,这里的数据是指既能还原操作的数据又能重复操作的数据。做undo操作时程序根据记录的用户操作进行反向处理,对信息编辑窗口进行改动,而做redo操作的时候程序根据记录的用户操作来重复用户的操作。这种做法是以时间换来空间,程序记录的信息变少了,每次只需要记录用户的操作类型以及相关的操作数据(比如用户编辑的哪个控件,编辑前后的控件内容分别是什么),与操作无关的其他数据则不需要记录。这种做法比起记录数据的方式肯定要复杂,但是胜于节俭内存。
参考 http://blog.163.com/gc_2299/blog/static/2242921682013102610251649/