軟件領域中的設計模式的重要性不言而喻。設計模式中運用了面向對象編程語言的重要特性:封裝、繼承、多態。雖然知道這些特性的定義但是並沒有做到真正的理解,這樣特性有什麼作用?用於什麼場合中等等問題,帶着疑問開始學習設計模式,主要參考《大話設計模式》和《設計模式:可複用面向對象軟件的基礎》兩本書。
備忘錄(Memento):在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態,這樣就可以將以後的對象狀態恢復到先前保存的狀態。
適用於功能比較複雜的,但需要記錄或維護屬性歷史的類;或者需要保存的屬性只是衆多屬性中的一小部分時Originator可以根據保存的Memo還原到前一狀態。
#include <iostream>
#include <string>
using namespace std;
class Memo;
//發起人類
class Originator
{
public:
string state;
Memo* CreateMemo();
void SetMemo(Memo* memo);
void Show()
{
cout << "狀態:" << state << endl;
}
};
//備忘錄類
class Memo
{
public:
string state;
Memo(string strState)
{
state = strState;
}
};
//創建備忘錄
Memo* Originator::CreateMemo()
{
return new Memo(state);
}
//恢復備忘錄狀態
void Originator::SetMemo(Memo* memo)
{
state = memo->state;
}
//管理者類
class Caretaker
{
public:
Memo* memo;
};
//客戶端:
int main()
{
Originator* on = new Originator();
on->state = "on";
on->Show();
//創建備忘錄
Caretaker* c = new Caretaker();
c->memo = on->CreateMemo();
on->state = "off";
on->Show();
//恢復備忘錄中狀態
on->SetMemo(c->memo);
on->Show();
return 0;
}