c++设计模式(备忘录模式)

备忘录模式

  • 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象回复到原先保存的状态
  • 将要保存的细节封装到备忘录(Memento)中,更改保存的细节不影响客户端
  • 适用于功能比较复杂,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分
#include <iostream>
#include <string>
using namespace std;

class Originator;
//备忘录
class Memento
{
public:
	Memento(string _stateA, string _stateB)
		:stateA(_stateA), stateB(_stateB)
	{}
	string UseMemStateA()
	{
		return stateA;
	}
	string UseMemStateB()
	{
		return stateB;
	}
	~Memento() {}
private:
	string stateA;
	string stateB;
};
//发起人
class Originator
{
public:
	Originator(string s1, string s2, string s3)
		:stateA(s1), stateB(s2), stateC(s3)
	{}
	~Originator() {}
	Memento* CreateMemento()
	{
		return new Memento(stateA, stateB);
	}
	void SetState(string s)
	{
		stateA = s;
		stateB = s;
		stateC = s;
	}
	void SetMemento(Memento &mem)
	{
		stateA = mem.UseMemStateA();
		stateB = mem.UseMemStateB();
	}
	void ShowState()
	{
		cout << stateA << endl;
		cout << stateB << endl;
		cout << stateC << endl;
	}
private:
	string stateA;
	string stateB;
	string stateC;
};
//管理者
class Caretaker
{
public:
	Caretaker() 
	{
		mem = NULL;
	}
	~Caretaker() 
	{
		if (mem != NULL)
			delete mem;
	}
	Memento* GetMemento()
	{
		return mem;
	}
	Memento *mem;
};

int main()
{
	//初始状态
	Originator* o = new Originator("AA", "BB", "CC");
	o->ShowState();
	
	cout << "----------" << endl;
	//创建管理者,管理备忘录
	Caretaker* c = new Caretaker;
	c->mem = o->CreateMemento();
	//改变状态
	o->SetState("err");
	o->ShowState();

	cout << "----------" << endl;
	//恢复需要恢复的部分
	o->SetMemento(*c->mem);
	o->ShowState();

	getchar();
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值