設計模式 備忘錄模式 C 實現

2021-07-28 20:16:07 字數 1503 閱讀 8370

備忘錄模式(memento pattern)儲存物件的某個狀態,以便在適當的時候恢復。備忘錄模式屬於行為型模式。

意圖

在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。

解決問題備忘錄模式就是在不破壞封裝的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣可以在以後將物件恢復到原先儲存的狀態。

如何解決

通過乙個備忘錄類專門儲存物件的狀態。

優點

1. 給使用者提供了一種可以恢復狀態的機制,可以使使用者能夠比較方便的恢復到某個歷史狀態

2. 實現了資訊的封裝,使得使用者不需要關係儲存的細節

缺點

消耗資源。如果類成員變數過多,肯定會占用比較大的資源,而且沒儲存一次都會消耗一定的記憶體

注意事項

1. 為了符合迪公尺特原則,還要增加乙個管理備忘錄的類

2. 為了節約記憶體,可使用原型模式+備忘錄模式

c++實現

舉例子:

我們玩單機遊戲的時候總會遇到老婆大人的各位事情,一會去買瓶醋了,一會去打個醬油了,會耽誤我們玩遊戲的程序,但是此時我們能有「儲存遊戲」這個寶貝,我們的主基地不會在我們打醬油的時候被對手拆掉。

uml類圖

//備忘錄模式

/* originator:負責建立乙個備忘錄memento,並且記錄當前時刻它的內部狀態

memento:儲存originator物件的內部狀態,並且防止originator以外的物件訪問備忘錄memento

caretaker : 儲存備忘錄memento

*/class memento

string getstate()

void setstate(string _state) };

class originator

string getstate()

void setstate(string _state)

memento creatememento()

void restorememento(memento memento) //恢復 };

class caretaker

void setmemento(memento mem)

};

客戶端:

int  test_memento()  //備忘錄模式

C 設計模式 備忘錄模式

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

C 設計模式 備忘錄模式

一.介紹 備忘錄模式 memento pattern 屬於行為型模式。它在不破壞封裝性的前提下,捕捉乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可將該物件恢復到原先儲存的狀態。二.實現 備忘錄顧名思義就是可以儲存多個資訊的工具。在該模式下,如果乙個物件出現了多種狀態,通過管理者的集合去...

C 設計模式實現 備忘錄 Memento 模式

一.備忘錄模式 定義 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態。並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。結構圖 使用範圍 memento 模式比較適用於功能比較複雜的。但須要維護或記錄屬性歷史的類,或者須要儲存的屬性僅僅是眾多屬性中的一小部分時。originato...