有些事,錯誤了就是永遠;有些人,一轉身就是一輩子,不要輕易忽略任何愛,哪怕只是前天母親節一通平凡的電話;時光走著她的路,路過青春的腳步,每個人或許都有遺憾的時候,總是要等到睡覺前,才知道功課只做了一點點總是要等到考試后,才知道該念的書都沒有念,為了讓自己的人生少些許遺憾,需要我們做好時間管理,提前做好準備,認真思量之后再做打算。
但是在神奇的編程世界中,有一種魔法,可以讓你避免很多遺憾,強大的word中具有“Ctrl+Z”的功能,PS等一些軟件中,也具有此類功能,基本上所有的帶編輯功能的軟件都具有撤銷這個功能,撤銷功能給了我們恢復先前狀態的機會。拿我們電腦系統而言,可以進行備份,把系統打成壓縮包就是備份,為了在系統出現崩潰情況或中毒時還原成以前的樣子!今天我們的模式就從備份開始說起,備忘錄模式----在不破壞封裝性的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態。這樣以后就可將該對象恢復到保存的狀態。一如她自己的名字,就是為了備忘,首先我們來看一下備忘錄模式的結構圖:
? ? ? ? ?
剛開始接觸的電腦的時候,首先需要掌握的就是學會裝系統,裝來裝去,免不了有點兒麻煩,這個時候,有了新的需求,就有了新的解決方案,那就是對我們先前的電腦進行備份,有句話這樣說,備份是一種態度, 以電腦備份為例,看看備忘錄模式如何在實際中運用:
發起人(Originator)類
~~~
public?class?WindowsSystem??
????{??
????????private?string?status;??
??????????????????????????????????????????//需要保存的屬性??
????????public?string?Status??
????????{??
????????????get??
????????????{??
????????????????return?status;??
????????????}??
????????????set??
????????????{??
????????????????status?=?value;??
????????????}??
????????}??
??
??
????????public?Memento?createOtherSystem()?????????????//創建備忘錄??
????????{??
????????????return?new?Memento(status);??
????????}??
????????public?void?recoverSystem(Memento?m)???????????//恢復備忘錄??
????????{??
????????????this.status?=?m.Status;??
????????}??
????}??
~~~
備忘錄(Memento)類
~~~
public?class?Memento??
????{??
????????private?string?status;??
???????????????????????????
????????public?string?Status??
????????{??
????????????get??
????????????{??
????????????????return?status;??
????????????}??
????????????set??
????????????{??
????????????????Console.WriteLine("系統處于:"?+?this.status);??
????????????????status?=?value;??
????????????}??
????????}??
??
????????public?Memento(string?status)??
????????{??
????????????this.status?=?status;??
????????}??
????}??
~~~
管理者(Caretaker)類
~~~
public?class?UserComputer??
????{??
????????private?Memento?memento;??
??
????????public?Memento?recoverMemento()??
????????{??
????????????//?恢復系統????
????????????return?this.memento;??
????????}??
??
????????public?void?createMemento(Memento?memento)??
????????{??
????????????//?保存系統????
????????????this.memento?=?memento;??
????????}??
????}????
~~~
客戶端程序
~~~
?class?Program??
????{??
????????static?void?Main(string[]?args)??
????????{??
????????????WindowsSystem?Win8?=?new?WindowsSystem();?//?Win8系統????
????????????UserComputer?user?=?new?UserComputer();???
????????????Win8.Status?=?"良好的狀態";?//?Win8處于良的運行狀態????
????????????user.createMemento(Win8.createOtherSystem());?//?用戶進行備份,Win8系統產生備份文件????
????????????Win8.Status?=?"狀態較差";?//?Win8處于較差的狀態??
????????????Win8.recoverSystem(user.recoverMemento());?//?用戶發出命令,進行備份還原???
11. ????????????Console.WriteLine("當前系統處于"?+?Win8.Status);??
????????????Console.ReadKey();????
????????}??
????}??
~~~
在軟件開發中,有時需要保存一個對象的狀態,以便于允許用戶取消相關操作或者從以往的狀態中恢復過來。比如一個文檔版本管理系統,可以根據需要將指定文檔恢復到之前保存過的任意一個狀態。這時就可以通過備忘錄模式來實現。備忘錄模式在我們生活中的應用還有很多,比如象棋中的悔棋功能,游戲中的存檔功能,都是備忘錄在實際生活中的應用。
用好備忘錄,讓我們的人生中少些許遺憾和后悔,多一份精彩,多一份期待......