備忘錄模式memento pattern
定義:備忘錄模式,是行為模式之一,它的作用是儲存物件的內部狀態,並在需要的時候(undo/rollback)恢復到以前的狀態。
備忘錄模式的類結構圖:
備忘錄模式的角色:
1.originator(發起者):負責建立乙個備忘錄memento,用以記錄當前時刻自身的內部狀態,並可使用備忘錄恢復內部狀態。originator可以根據需要決定memento儲存自己的哪些內部狀態。
2.memento(備忘錄):負責儲存originator物件的內部狀態,並可以防止originator以外的其他物件訪問備忘錄。備忘錄有兩個介面:caretaker只能看到備忘錄的窄介面,他只能將備忘錄傳遞給其他物件。originator卻可看到備忘錄的寬介面,允許它訪問返回到先前狀態所需要的所有資料。
3.caretaker(管理者):負責備忘錄memento,不能對memento的內容進行訪問或者操作。
備忘錄模式的優缺點:
一、備忘錄模式的優點
1、有時一些發起人物件的內部資訊必須儲存在發起人物件以外的地方,但是必須要由發起人物件自己讀取,這時,使用備忘錄模式可以把複雜的發起人內部資訊對其他的物件遮蔽起來,從而可以恰當地保持封裝的邊界。
2、本模式簡化了發起人類。發起人不再需要管理和儲存其內部狀態的乙個個版本,客戶端可以自行管理他們所需要的這些狀態的版本。
3、當發起人角色的狀態改變的時候,有可能這個狀態無效,這時候就可以使用暫時儲存起來的備忘錄將狀態復原。
二、備忘錄模式的缺點:
1、如果發起人角色的狀態需要完整地儲存到備忘錄物件中,那麼在資源消耗上面備忘錄物件會很昂貴。
2、當負責人角色將乙個備忘錄 儲存起來的時候,負責人可能並不知道這個狀態會占用多大的儲存空間,從而無法提醒使用者乙個操作是否很昂貴。
3、當發起人角色的狀態改變的時候,有可能這個協議無效。如果狀態改變的成功率不高的話,不如採取「假如」協議模式。
兌現**:
#include #include using namespace std;
//備忘者類備份發起者的狀態
class memento
string getstate()
void setstate(string state)
//private:
string _state;
};//發起者類備份自己的狀態
class originator
//建立備份
memento* createbackups()
//恢復備份內容
void restorebackups(memento* memento)
//顯示狀態
void show()
設計模式之備忘錄模式(C )
備忘錄,在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。該模式很好理解,其uml圖如下 在originator中提供了建立memento的介面,具體要儲存什麼樣的內容,則根據需求來定。而caretaker則是負責管理memento...
設計模式之備忘錄模式
機器 public class machine public void startplay disc.setluminance 60 disc.settime 0 disc.setvolume 80 public void stopplay disc.setluminance 70 disc.set...
設計模式之備忘錄模式
定義 在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。備忘錄模式有三個角色 以儲存遊戲進度為例,退出遊戲前存檔,再進入遊戲就會顯示退出之前的狀態。示例 遊戲發起人類 public class game public state cr...