1. 程式人生 > >undo/redo功能的原理和思路

undo/redo功能的原理和思路

重復 裏的 內存 控件 發生 記錄操作 static 又能 恢復

一些具有操作記錄的系統,如店鋪裝修、富文本編輯等,都具有undo/redo功能,可實現界面操作過程的撤銷和恢復,簡述開發undo/redo功能的原理和思路。

undo是將用戶上一步做的操作對程序造成的改動恢復到改動之前,而redo操作是指重新實現這種改動。

undo/redo操作的實現方式分為兩類:記錄數據和記錄操作。

記錄數據是指將信息編輯窗口打開時,保存原始數據,然後記錄用戶每次操作後的結果數據,這裏的數據是指信息編輯窗口中所有可能發生變動的數據。做undo操作時程序將用戶上一步操作前的數據傳給信息編輯窗口相應控件。這種做法是以空間來換時間,程序不必考慮用戶到底改變了哪些數據,反正每次都是替換的所有可能改變的數據。當每次保存的數據量比較小時,這種做法比較方便快捷,但是如果數據量大,比如包括圖形、視頻信息等,這種方法就比較耗費內存了。

記錄操作是指信息編輯窗口打開後,記錄用戶每次的操作,包括具體的操作動作以及操作改變的數據,這裏的數據是指既能還原操作的數據又能重復操作的數據。做undo操作時程序根據記錄的用戶操作進行反向處理,對信息編輯窗口進行改動,而做redo操作的時候程序根據記錄的用戶操作來重復用戶的操作。這種做法是以時間換來空間,程序記錄的信息變少了,每次只需要記錄用戶的操作類型以及相關的操作數據(比如用戶編輯的哪個控件,編輯前後的控件內容分別是什麽),與操作無關的其他數據則不需要記錄。這種做法比起記錄數據的方式肯定要復雜,但是勝於節儉內存。

參考 http://blog.163.com/gc_2299/blog/static/2242921682013102610251649/

undo/redo功能的原理和思路