使用命令取消一個操作的程序
作者:佚名 時間:2012-06-12 分享到:
讓你的客戶(真正的客戶或者另一個程序)撤銷一個已經執行的操作,是在編寫程序時經常遇到的需求,現在,撤銷操作是各種正規的文本編輯軟件必備的操作,而且這個功能在其他軟件中也十分覺,例如,大多數數據庫都支付回退處理(即撤銷操作的另一個名字).實際上,撤銷操作能幫助難免犯錯的八或程序查找出由于錯誤的而導致的結果.
實現撤銷操作的一種基本方法是在進行更動之前記住當時的狀態,然后如果客戶要求撤銷這個更動,那只需要恢復之前記住的狀態即可,這種做法的問題在于,文本文件或者文本處理文檔(且不論數據庫)可能會比較大,每次當你進行修改的進修都要制作一個包含所有內容的副本,這會使你的程序在資源密集的情況下迅速產生巨大冗余.
對于這種情況,命令模式能夠進行進一點的幫助,一個命令對象封閉子篩一些事情的邏輯,通過一些發送,這個命令對象同樣可以記錄如何撤銷這些事情,這個主意其實很簡單,我們創建的每一個可以撤銷的倒序都包含兩個方法,基一當然是處理事情的execute方法,伴隨著這個方法,我們再加入一個unexecute方法,用于撤銷已經執行的操作,當用戶在進行一系列修改的時候,我們創建一個又一個能立刻的命令對象來實現這些修改,同時我們還在一個列表中依次記錄這些命令對象,如果用戶突然改變子主意要撤銷修改,那么我們只需要從那個列表中找到最后程序的那個命令.并且unexecute它.不僅最后一個命令可以被撤銷,按照同樣的方法,我們可以回測整個命令歷史,將之前執行過的任何數量的命令撤銷.