1. 程式人生 > >設計模式(十四)備忘錄模式

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

(十四)備忘錄模式

在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件外儲存這個狀態。這樣以後就可以將該物件恢復到原先儲存的狀態。

備忘錄模式比較適用於功能比較複雜的,但需要維護或記錄屬性歷史的類,或者需要儲存的屬性只是眾多屬性中的一小部分時,發起人可以根據儲存的備忘錄資訊還原到前一狀態。


#include <iostream>
#include <string>
using namespace std;

//(十四)備忘錄模式
//在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件外儲存這個狀態。這樣以後就可以將該物件恢復到原先儲存的狀態。
//備忘錄模式比較適用於功能比較複雜的,但需要維護或記錄屬性歷史的類,或者需要儲存的屬性只是眾多屬性中的一小部分時,發起人可以根據儲存的備忘錄資訊還原到前一狀態。

//備忘錄類
class Memo
{
private:
	string state;
public:
	Memo(string strState)
	{
		state= strState;
	}
	string get()
	{
		return state;
	}
};
//發起人類
class Originator
{
private:
	string state;
public:
	Memo* CreateMemo()
	{
		return new Memo(state);
	}
	void SetMemo(Memo* memo)
	{
		state = memo->get();
	}
	void Setstate(string st)
	{
		state=st;
	}
	void Show()
	{
		cout<<"狀態:"<<state<<endl;
	}
};
//管理者類
class Caretaker
{
private:
	Memo* memo;
public:
	void SetMemo(Memo* m)
	{
		memo=m;
	}
	Memo* GetMemo()
	{
		return memo;
	}
};

//客戶端:
int main()
{
	Originator* on=new Originator();
	on->Setstate("on");
	on->Show();

	Caretaker* c= new Caretaker();
	c->SetMemo(on->CreateMemo());

	on->Setstate("off");
	on->Show();

	on->SetMemo(c->GetMemo());
	on->Show();
	return 0;
}