設計模式之18 備忘錄模式Memento

2021-07-26 00:23:54 字數 989 閱讀 5868

有時候我們需要記錄乙個物件的狀態,用於該物件在某些狀況下的恢復,這種模式 我們稱之為備忘錄模式

發起人(originator):需要備份的物件,將自身的屬性資訊拷貝到乙個備忘錄物件,並能夠通過備忘錄中的屬性資訊 進行恢復;

備忘錄(memento):儲存發起人狀態,提供set,get介面進行狀態訪問;

管理角色(caretaker):用於管理備忘錄物件的實現類。

在什麼情況下需要使用 備忘錄模式呢?

1. 功能比較複雜,需要維護或記錄屬性的物件;作者在做undo、redo時曾用到過 memento 來記錄複雜的類 和 圖元。

2. 需要儲存的內容只是物件的一部分屬性。

備忘錄模式可以把複雜的發起人內部資訊對其他的物件遮蔽起來,發起人不再需要管理和儲存其內部狀態的版本。

同樣由於上面的這個原因,發起人並不清楚 備忘錄的儲存代價,這種情況下的應用就需要事先了解,否則可能較大程度上影響 記憶體和儲存空間,這是必須要注意的。

乙個典型的備忘錄模式:

// memento類定義

class memento

void setstate(const std::string& state)

void getstate(std::string& state)

std::string m_strstate;

}

備忘錄模式的本質就在於儲存和恢復物件的內部狀態。

18 備忘錄模式

package memento 以前的小霸王遊戲是不是可以儲存遊戲進度?是的 那是怎麼實現的呢?應該是.來 先簡單實現一下 public class commonly class gamerole 獲得初始狀態 public void getinitstate 戰鬥 public void figh...

18 備忘錄模式

在不破壞封裝的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存該狀態。這樣以後就可將該物件恢復到原先儲存的狀態 理解originator 原發器,使用備忘錄來儲存某個時刻原發器自身的狀態,也可以使用備忘錄來恢復內部狀態 memento 備忘錄,儲存原發器物件的內部狀態,原發器外部的物件不應該能訪問...

18 設計模式 行為型 之備忘錄模式

作用 何時使用 優點給使用者提供了一種可以恢復狀態的機制,可以使使用者能夠比較方便地回到某個歷史的狀態 實現了資訊的封裝,使得使用者不需要關心狀態的儲存細節。例項 author create by chenxin data created in 2018 9 26 13 28 version act...