有時候我們需要記錄乙個物件的狀態,用於該物件在某些狀況下的恢復,這種模式 我們稱之為備忘錄模式。
發起人(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...