一、概述
現實生活中的備忘錄是用來記錄某些要去做的事情,或者是記錄已經達成的共同意見的事情,以防忘記了。而在軟體層面,備忘錄模式有著相同的含義,備忘錄物件主要用來記錄乙個物件的某種狀態,或者某些資料,當要做回退時,可以從備忘錄物件裡獲取原來的資料進行恢復操作。
備忘錄(memento):在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。
二、結構類圖
三、應用例項
還是用《大話設計模式》的遊戲例子,遊戲角色有攻擊力和防禦力,在大戰boss前儲存自身實力,當大戰boss後元氣大傷,從備忘錄物件恢復到大戰前的狀態
1、建立備忘錄物件
package2、建立遊戲角色物件(也就是原先物件)com.jet.pattern.memento;
/*** description
* 備忘錄物件,儲存遊戲角色的狀態
* created by administrator on 2017/2/23. */
public
class
memento
public
integer getvit()
public
void
setvit(integer vit)
public
integer getdef()
public
void
setdef(integer def)
}
package3、建立守護者物件com.jet.pattern.memento;
/*** description:
* 遊戲角色(相當於原先物件originator)
* created by administrator on 2017/2/23. */
public
class
gamerole
/*** 恢復實力
* @param
memento
*/public
void
recovermemento(memento memento)
/*** 展示遊戲實力
*/public
void
displaystate()
public
integer getvit()
public
void
setvit(integer vit)
public
integer getdef()
public
void
setdef(integer def)
}
package4、遊戲玩家物件com.jet.pattern.memento;
/*** description:
* 守護者物件,儲存原先物件的狀態
* created by administrator on 2017/2/23. */
public
class
caretaker
public
void
setmemento(memento memento)
}
package輸出結果:com.jet.pattern.memento;
/*** description:
* 模擬遊戲使用者
* created by administrator on 2017/2/23. */
public
class
client
}
四、總結
備忘錄模式使用場景可以在物件經過態改變後想恢復到之前的某乙個狀態,或者在物件將要經過一系列操作時把當前的某些資料備份,以便操作出問題時做回退處理。如果是簡單地考慮做備份,我們完全可以new出另外乙個物件出來,再把需要備份的資料放到這個新物件,但這就暴露了物件內部的細節,客戶端需要了解物件的組成。用了備忘錄模式,物件的封裝更好了,也簡化了客戶端的使用,客戶端不用關心要備份哪些資料。還有就是做備份可以用原型模式,但原型模式是複製整個物件的資料,很多時候我們只關心部分資料。在資料備份方面,備忘錄模式提供了更大的靈活性。
C 設計模式 十七 備忘錄模式
備忘錄模式 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。說白了就是儲存功能,像我們玩遊戲時的及時儲存操作。乙個備忘錄是乙個物件,它儲存另乙個物件在某個瞬間的內部狀態,而後者稱為備忘錄的原發器。當需要設定原發器的檢查點時,取消操...
設計模式 備忘錄模式
錄入大批人員資料。正在錄入當前人資料時,發現上乙個人的資料錄錯了,此時需要恢復上乙個人的資料,再進行修改。word文件編輯時,突然電腦宕機或者斷電,再開啟時,可以看到word提示你恢復以前的文件。就死儲存某個物件內部狀態的拷貝,這樣以後就可以將該物件恢復到原先的狀態。源髮器類originator 備...
設計模式 備忘錄模式
備忘錄模式 memento pattern 在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。涉及角色 1.original 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻自身的內部狀態,並可使用備忘錄恢復內部狀態。ori...