C 設計模式 備忘錄模式

2022-06-09 21:36:11 字數 1205 閱讀 7829

一.介紹  

備忘錄模式(memento pattern)。屬於行為型模式。它在不破壞封裝性的前提下,捕捉乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可將該物件恢復到原先儲存的狀態。

二.實現

備忘錄顧名思義就是可以儲存多個資訊的工具。在該模式下,如果乙個物件出現了多種狀態,通過管理者的集合去儲存這個物件的不同狀態,之後就能夠根據需要恢復各種時刻的狀態。

//

備忘錄(儲存發起人的內部狀態)

public

class

mememto}//

發起人(記錄當前時刻的內部狀態,恢復備忘錄狀態後重新記錄當前狀態)

public

class

originator

public mememto createmememto(string

text);}

public

override

string

tostring()

";}}//

管理角色(負責儲存備忘錄物件)

public

class

caretaker

public mememto getmememto(int

key)

throw

newnotsupportedexception();

}}//

呼叫public

static

void main(string

args)

次備忘"

); caretaker.addmememto(m);

console.writeline($

"action 次後:");

console.writeline(m.text);

}for (var i = 10; i > 0; i--)

後:");

console.writeline(m.text);

}}

三.總結

優點:1.如果某個操作錯誤地破壞了物件的完整性,此時可以使用備忘錄模式將物件修復成原來正確的資料。

2.備份的狀態資料儲存在發起人角色之外,這個發起人就不需要對各個備份的狀態進行管理。而是由備忘錄角色進行管理,而備忘錄角色又是由管理人角色管理,符合單一職責原則。

缺點:1.在實際的系統中,可能需要維護多份備份,需要消耗額外的資源,對效能有較大影響。

C 設計模式 備忘錄模式

應用 ifndef caretaker h define caretaker h include memento.h class caretaker void setmemento memento memento 備忘錄物件 private memento memento endif caretak...

設計模式 備忘錄模式

錄入大批人員資料。正在錄入當前人資料時,發現上乙個人的資料錄錯了,此時需要恢復上乙個人的資料,再進行修改。word文件編輯時,突然電腦宕機或者斷電,再開啟時,可以看到word提示你恢復以前的文件。就死儲存某個物件內部狀態的拷貝,這樣以後就可以將該物件恢復到原先的狀態。源髮器類originator 備...

設計模式 備忘錄模式

備忘錄模式 memento pattern 在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。涉及角色 1.original 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻自身的內部狀態,並可使用備忘錄恢復內部狀態。ori...