【正文】
Mem ento (int i)Set Mem ento (Ches sm anMe m ento m em ento )...: Ches sm anMe m ento: vo idChess m anMe m entoiii Prop ertyI m plem enta tion Prop ertyI m plem enta tion Prop ertyI m plem enta tion Prop erty Prop erty Prop erty labe lxyLabelXY: strin g: int: int: strin g: int: intiiiiiii Set ter Gette r Set ter Gette r Set ter Gette r Chess m anMe m ento (strin g la bel, int x , int y)set_Level (string value)get_ Lev el ()set_ X (int valu e)get_ X ()set_ Y (in t va lue)get_ Y ()...: vo id: strin g: vo id: int: vo id: int改進之后的中國象棋棋子撤銷功能結構圖 實現(xiàn)多次撤銷 ?實現(xiàn) using 。 namespace MementoSample { public class MementoCaretaker { //定義一個集合來存儲多個備忘錄 private ArrayList mementolist = new ArrayList()。 internal ChessmanMemento GetMemento(int i) { return (ChessmanMemento)mementolist[i]。 } internal void SetMemento(ChessmanMemento memento) { (memento)。 } } } 實現(xiàn)多次撤銷 ?實現(xiàn) 演示 …… 參考代碼 (DesignPattern\MementoExtend) 備忘錄模式的優(yōu)缺點與適用環(huán)境 ?模式優(yōu)點 ?提供了一種狀態(tài)恢復的實現(xiàn)機制 ,使得用戶可以方便地回到一個特定的歷史步驟 ?實現(xiàn)了對信息的封裝 ,一個備忘錄對象是一種原發(fā)器對象狀態(tài)的表示,不會被其他代碼所改動 備忘錄模式的優(yōu)缺點與適用環(huán)境 ?模式缺點 ?資源消耗過大 ,如果需要保存的原發(fā)器類的成員變量太多,就不可避免地需要占用大量的存儲空間, 每保存一次對象的狀態(tài)都需要消耗一定的系統(tǒng)資源 備忘錄模式的優(yōu)缺點與適用環(huán)境 ?模式適用環(huán)境 ?保存一個對象在某一個時刻的全部狀態(tài)或部分狀態(tài) ,這樣以后 需要時能夠恢復到先前的狀態(tài) , 實現(xiàn)撤銷操作 ?防止外界對象破壞一個對象歷史狀態(tài)的封裝性 ,避免將對象歷史狀態(tài)的實現(xiàn)細節(jié)暴露給外界對象 思考 ? 能否使用原型模式來創(chuàng)建備忘錄對象?如果可以,如何實現(xiàn)? END