備忘錄模式

2021-10-04 13:19:28 字數 1504 閱讀 1582

什麼是備忘錄模式

提供一種狀態恢復機制,可以儲存某個歷史時刻的狀態,並且狀態可以方便的恢復到某個特定的歷史時刻,例如資料備份與還原,編輯與撤銷,虛擬機器生成快照,與根據快照進行恢復

在不破壞封裝性的前提下,捕獲物件的內部狀態,並在該物件之外儲存這個狀態後續將該物件恢復到原先儲存的狀態

備忘錄模式角色分析

案例**

遊戲角色狀態記錄,建立遊戲角色,該有角色有攻擊力,防禦力狀態,記錄較色狀態,角色大戰後恢復角色狀

建立遊戲角色類(原發器)

class

gamerole

//獲取當前遊戲角色狀態

public memento getmemento

(gamerole gamerole)

//顯示當前狀態

public

void

descstate()

//大戰,將當前遊戲攻擊力設定為50,防禦力設定為50

public

void

fighting()

//恢復到某個狀態memento

public

void

restore

(memento memento)

}

建立狀態類(備忘錄),複製遊戲角色狀態資料

class

memento

}

建立管理者(負責人)

class

caretaker

mementolist.

add(memento)

; recordmap.

put(memento.id, mementolist);}

//根據遊戲id,獲取某個階段index,的狀態

public memento getstartmemento

(string id,

int index)

return mementolist.

get(index-1)

;}}

呼叫測試

public

static

void

main

(string[

]args)

**層面講

根據需要複製儲存的物件,建立乙個備忘錄類,獲取物件當前時刻的資料,賦值給備忘錄,將備忘錄物件儲存到負責人容器中,在儲存時根據需求選擇合適的容器,例如當前,可以儲存多個遊戲角色多個時刻的狀態,使用 map,key為遊戲角色id,value中的list中儲存了該角色多個時刻的備忘錄,假設只儲存乙個角色的多個時刻備忘錄,使用list作為容器,下標為時刻,負責人提供儲存與獲取某個時刻備忘錄的方法,原發器中提供獲取當前資料的備忘錄,與根據備忘錄恢復資料的方法

為了節約記憶體,備忘錄模式可以配合原型模式使用

備忘錄模式

備忘錄模式 memento 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。originator 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻它的內部狀態,並可以使用備忘錄恢復內部狀態。originator可根據需要...

備忘錄模式

先從物件導向的三大特徵之一封裝說起。物件導向的封裝簡單點說就是把狀態 資料 和行為 操作這些資料的方法 放到一起,構成乙個單元,通常叫做類。乙個物件的行為是事先確定好的 靜態 一些指令碼,如果物件的狀態相同,物件看起來就是一樣的。所以當我們需要把乙個物件的某一時刻儲存起來,那麼只需要儲存它在那個時刻...

備忘錄模式

面臨問題 物件狀態的變化無端,如何回溯恢復物件在某個點的狀態?在軟體構建過程中,某些物件的狀態在轉換過程中,可能由於某種需要,要求程式能夠回溯到物件之前處於某個點時的狀態。如果使用一些公用介面來讓其他物件得到物件的狀態,便會暴露物件的細節實現。如何實現物件狀態的良好儲存與恢復?但同時又不會因此而破壞...