// 定义:在不破坏封装性的前提下,不过一个对象的状态,并在对象
// 之外保存该状态
//
// 模式举例:打游戏由于某种原因存档,可随时回复
//
// 模式特点:
//
//
#include<iostream>
#include<string>
using namespace std;
class Memento
{
public:
Memento(string name, int age):m_name(name),m_age(age){}
void setName(string name)
{
m_name = name;
}
void setAge(int age)
{
m_age = age;
}
string getName()
{
return m_name;
}
int getAge()
{
return m_age;
}
private:
string m_name;
int m_age;
};
class People
{
public:
People(string name, int age):m_name(name),m_age(age){}
void setName(string name)
{
m_name = name;
}
void setAge(int age)
{
m_age = age;
}
string getName()
{
return m_name;
}
int getAge()
{
return m_age;
}
Memento * createMemento()
{
return new Memento(m_name,m_age);
}
void setMemento(Memento * m)
{
m_name = m->getName();
m_age = m->getAge();
}
void showMe()
{
cout<<"name is : "<<m_name<<",age is "<<m_age<<endl;
}
private:
string m_name;
int m_age;
};
//这个类存在的意义?
//对备份进行管理,有可能存在多个备份
class Caretaker
{
public:
Caretaker(Memento * m):m_memento(m){}
void setMemento(Memento * m)
{
m_memento = m;
}
Memento * getCaretaker()
{
return m_memento;
}
private:
Memento * m_memento;
};
int main()
{
People * pPeople = new People("xiaoming", 28);
pPeople->showMe();
Caretaker * pCaretaker = new Caretaker(pPeople->createMemento());
pPeople->setAge(30);
pPeople->showMe();
pPeople->setMemento(pCaretaker->getCaretaker());
pPeople->showMe();
return 0;
}