1.备忘录模式
1備忘錄模式的核心內容是:
A:包含一個存儲記錄的結構(C++中用類這種結構來存儲)
B:包含產生記錄的類。
C:使用一種數據結構來存儲操作的記錄。
2備忘錄模式的作用是回放所做的操作
3備忘錄模式具體描述
備忘錄模式:備忘錄對象是一個用來存儲另外一個對象內部狀態的快照的對象。
備忘錄模式的用意是在不破壞封裝的條件下,將一個對象的狀態捉住,
并外部化,存儲起來,從而可以在將來合適的時候把這個對象還原到存儲起來的狀態。
?
同時跟幾個MM聊天時,一定要記清楚剛才跟MM說了些什么話
不然MM發現了會不高興的哦,幸虧我有個備忘錄,
剛才與哪個MM說了什么話我都拷貝一份放到備忘錄里面保存,
這樣可以隨時察看以前的記錄啦。
?
設計需要回放的軟件,記錄一下事物的狀態。數據庫備份,文檔的編譯,撤銷,恢復
?
設計備忘錄三大步驟
A設計記錄的節點,存儲記錄,//記錄鼠標,鍵盤的狀態
B設計記錄的存儲,vector,list,map,set,鏈表,圖,數組,樹
C操作記錄的類,記錄節點狀態,設置節點狀態,顯示狀態,0.1秒記錄一下
4.備忘錄模式類圖
5.代碼:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
//備忘錄模式:備忘錄對象是一個用來存儲另外一個對象內部狀態的快照的對象。
//備忘錄模式的用意是在不破壞封裝的條件下,將一個對象的狀態捉住,
//并外部化,存儲起來,從而可以在將來合適的時候把這個對象還原到存儲起來的狀態。
?
//同時跟幾個MM聊天時,一定要記清楚剛才跟MM說了些什么話
//,不然MM發現了會不高興的哦,幸虧我有個備忘錄,
//剛才與哪個MM說了什么話我都拷貝一份放到備忘錄里面保存,
//這樣可以隨時察看以前的記錄啦。
?
//設計需要回放的軟件,記錄一下事物的狀態。數據庫備份,文檔的編譯,撤銷,恢復
?
//設計備忘錄三大步驟
//1.設計記錄的節點,存儲記錄,//記錄鼠標,鍵盤的狀態
//2.設計記錄的存儲,vector,list,map,set,鏈表,圖,數組,樹
//3.操作記錄的類,記錄節點狀態,設置節點狀態,顯示狀態,0.1秒記錄一下
?
//備忘錄的節點,下面是記錄的節點,存儲記錄信息
//類作為存儲結構
class Memo
{
public:
??? string state;
??? Memo(string state) //記錄當前的狀態
??? {
??????? this->state = state;
??? }
};
?
//類的包含備忘錄的節點,Originator:表示的是發起人,起源,起因
//作為操作類
class Originator
{
public:
??? string state;
??? void setMemo(Memo *memo)
??? {
??????? state = memo->state;
??? }
??? Memo *createMemo()
??? {
??????? return new Memo(state);
??? }
??? void show()
??? {
??????? cout << state << endl;
??? }
};
?
//備忘錄的集合,作為存儲結構
class Caretaker
{
public:
??? vector<Memo *> memo;
??? void save(Memo *memo)
??? {
??????? (this->memo).push_back(memo);
??? }
??? Memo *getState(int i)
??? {
??????? return memo[i];
??? }
};
?
int main()
{
??? //操作類
??? Originator *og = new Originator();
??? //存儲結構
??? Caretaker *ct = new Caretaker();
?
??? og->state = "on";
??? og->show();
??? ct->save(og->createMemo());
?
??? og->state = "off";
??? og->show();
??? ct->save(og->createMemo());
?
??? og->state = "middle";
??? og->show();
??? ct->save(og->createMemo());
?
??? og->setMemo(ct->getState(1));
??? og->show();
?
??? og->setMemo(ct->getState(2));
??? og->show();
??? cin.get();
??? return 0;
}
運行結果:
總結
- 上一篇: STL算法find,find_if,fi
- 下一篇: 劣后资金是什么意思