以儲存遊戲為例,在玩魂斗羅之前,一般在快到boss的時候,我會先儲存遊戲的狀態。與boss作戰時萬一遊戲掛了。可以利用備忘錄恢復到戰前狀態了。
備忘錄模式:獲取乙個物件的某個狀態,並且在物件之外儲存,使得在需要的情況下恢復物件。(不會破壞封裝性) 又叫做快照模式(snapshot pattern)或者token模式,是23種設計模式之一
originator(發起人):負責建立乙個備忘錄memento,用以記錄當前時刻自身的內部狀態,並可使用備忘錄恢復內部狀態。originator可以根據需要決定memento儲存自己的哪些內部狀態。
memento(備忘錄):負責儲存originator物件的內部狀態,並可以防止originator以外的其他物件訪問備忘錄。備忘錄有兩個介面:caretaker只能看到備忘錄的窄介面,他只能將備忘錄傳遞給其他物件。originator卻可看到備忘錄的寬介面,允許它訪問返回到先前狀態所需要的所有資料。
caretaker(管理者):負責備忘錄memento,不能對memento的內容進行訪問或者操作。
角色職責
發起人
- 建立乙個含有當前的內部狀態的備忘錄物件
- 使用備忘錄物件儲存內部狀態
負責人 管理者
- 負責儲存備忘錄物件
- 不檢查備忘錄物件的內容
優點
1. 給使用者提供了一種可以恢復狀態的機制,可以使使用者能夠比較方便地回到某個歷史的狀態。
2. 實現了資訊的封裝,使得使用者不需要關心狀態的儲存細節。
缺點
消耗資源。如果類的成員變數過多,勢必會占用比較大的資源,而且每一次儲存都會消耗一定的記憶體。
應用例項
1、後悔藥。
2、打遊戲時的存檔。
3、windows 裡的 ctri + z。
4、ie 中的後退。
5、資料庫的事務管理。
總之是一些需要儲存/恢復資料地相關狀態場景,以及需要提供乙個可回滾地操作。
注意事項
1、為了符合迪公尺特原則,還要增加乙個管理備忘錄的類。
2、為了節約記憶體,可使用原型模式+備忘錄模式。
github
備忘錄模式
大話設計模式讀書筆記之備忘錄模式
1.定義 memento,在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可以將該物件恢復到原先儲存的狀態。如遊戲中的恢復到某一關卡 2.uml 類圖 解釋說明 originator 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻它的內部狀態,並可使...
大話設計模式 備忘錄模式
一 備忘錄模式 在不破壞封裝的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可以將該物件恢復到原先儲存的狀態。二 示例 data public class memento data public class originator public void setmemento ...
大話設計模式之備忘錄模式
備忘錄模式就是把乙個狀態儲存在乙個類當中,需要用的時候,拿出來。例子如下 主介面類 一共有四個類 主角類originator記錄主角基本資訊,記憶類memento,管理者類caretaker,主函式類main package mementopattern public class main publ...