c++设计模式-----备忘录模式Mmento

备忘录模式:

      备忘录模式很简单啊,就是备份之前的状态。在之后恢复这个状态。

再来看在设计模式中是怎么定义的:

意图:

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

适用性:

必须保存一个对象在某一个时刻的(部分)状态, 这样以后需要时它才能恢复到先前的状态。

如果一个用接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。

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

class Originator;
class Memento
{
	friend Originator;
public:
	Memento(){}
	Memento(string st1, string st2) :m_state1(st1), m_state2(st2){}
	Memento GetState()
	{
		return *this;
	}
	void SetState(const Memento &memento)
	{
		m_state1 = memento.m_state1;
		m_state1 = memento.m_state2;
	}

private:
	string m_state1;
	string m_state2;
};

class Originator
{
public:
	Originator(){}
	Originator(string st1, string st2) :m_state1(st1), m_state2(st2){}

	Memento SetMemento()
	{
		Memento save;
		save.m_state1 = m_state1;
		save.m_state2 = m_state2;
		return save;
	}

	void CreatMemento(const Memento &m)
	{
		m_state1 = m.m_state1;
		m_state2 = m.m_state1;
	}

	void show_state()
	{
		cout << m_state1 << " " << m_state2 << endl;
	}

	void chang_status(string st1, string st2)
	{
		m_state1 = st1;
		m_state2 = st2;
	}

private:
	string m_state1;
	string m_state2;
};

class Caretaker
{
public:
	Caretaker(){}
	void Save(Memento &menento) { vec_memento.push_back(menento); }
	Memento get_state(int idx)
	{
		return vec_memento[idx];
	}
private:
	vector<Memento> vec_memento;
};

int main()
{
	Caretaker caretake;
	Originator originalor("chen", "xun");//初始状态
	originalor.show_state();
	caretake.Save(originalor.SetMemento());//保存初始状态

	originalor.chang_status("zte", "company");//改变状体
	originalor.show_state();

	
	originalor.CreatMemento(caretake.get_state(0));//恢复状态
	originalor.show_state();


	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值