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