設計模式—備忘錄模式(十四)

        軟件領域中的設計模式的重要性不言而喻。設計模式中運用了面向對象編程語言的重要特性:封裝、繼承、多態。雖然知道這些特性的定義但是並沒有做到真正的理解,這樣特性有什麼作用?用於什麼場合中等等問題,帶着疑問開始學習設計模式,主要參考《大話設計模式》和《設計模式:可複用面向對象軟件的基礎》兩本書。

        備忘錄(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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章