備忘錄模式:在不破壞封裝的情況下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可以將該物件恢復到原先儲存的狀態。
備忘錄模式理解:就是備忘錄,將我們更改之前的資料儲存在備忘錄中,當我們要取消更改,或者更改錯誤,想要返回之前的時候,通過備忘錄管理者(就像是乙個介面,專門用來提取備忘錄中的資料和更改備忘錄中的資料的,這樣可以減少客戶端**的負擔。)來獲取我們之前儲存在備忘錄中的資料。
現實聯想:我想玩過魔獸世界之冰封王座的應該都知道,在我們玩劇情的時候,我們每過一關或者不想玩的時候最好儲存一下進度。而儲存進度的備忘錄數量是有限的,這裡每個備忘錄都對應乙個備忘錄類和乙個備忘錄管理類,每當我們儲存進度的時候,都會通過備忘錄管理類,將新的資料新增到備忘錄中,或者更改備忘錄中的資料。(備忘錄是儲存我們資料的地方)
備忘錄模式優點:
將儲存的細節封裝在備忘錄類中,以後更改儲存細節的時候不用影響客戶端。
備忘錄模式比較實用於功能比較複雜的,但需要維護或記錄屬性歷史的類,或者需要儲存的屬性只是眾多屬性中的一小部分是,管理類可以根據儲存的備忘錄資訊還原到前一狀態。
備忘錄例項:遊戲進度的訪問
遊戲角色**
class
gamerole
//讀取存檔
public
void
recoverystate
(rolestatememento memento)
//假設當前狀態的生命力為1000,攻擊力為150,防禦力為100
public
void
getinitstate()
//失敗後的資料
public
void
fight()
//顯示角色當前的資料
public
void
statedisplay()
",this
.vit)
; console.
writeline
("攻擊力:"
,this
.atk)
; console.
writeline
("防禦力:"
,this
.def);}
}
備忘錄類,儲存遊戲資料
class
rolestatememento
public
int vitality
set
}public
int attack
set
}public
int defense
set
}}
管理類**
class
rolestatecaretaker
set
}}
客戶端**
static
void
main
(string[
] args)
新增管理類的功能是讓客戶端不知己呼叫備忘錄,這樣有利於增加**的安全性,和減少與客戶端的偶聯。 備忘錄模式總結
每個人都有犯錯誤的時候,都希望有種 後悔藥 能彌補自己的過失,讓自己重新開始,但現實是殘酷的。在計算機應用中,客戶同樣會常常犯錯誤,能否提供 後悔藥 給他們呢?當然是可以的,而且是有必要的。這個功能由 備忘錄模式 來實現。其實很多應用軟體都提供了這項功能,如 word 記事本 photoshop e...
備忘錄模式
備忘錄模式 memento 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。originator 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻它的內部狀態,並可以使用備忘錄恢復內部狀態。originator可根據需要...
備忘錄模式
先從物件導向的三大特徵之一封裝說起。物件導向的封裝簡單點說就是把狀態 資料 和行為 操作這些資料的方法 放到一起,構成乙個單元,通常叫做類。乙個物件的行為是事先確定好的 靜態 一些指令碼,如果物件的狀態相同,物件看起來就是一樣的。所以當我們需要把乙個物件的某一時刻儲存起來,那麼只需要儲存它在那個時刻...