备忘录模式
备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一 个对象的状态捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。
同时跟几个MM聊天时,一定要记清楚刚才跟MM说了些什么话,不然MM发现了会不高兴的哦,幸亏我有个备忘录,刚才与 哪个MM说了什么话我都拷贝一份放到备忘录里面保存,这样可以随时察看以前的记录啦。
#include <iostream>
using namespace std;
class Memento {
public:
Memento(string name, int age){
this->name = name;
this->age = age;
}
string getName() {
return name;
}
void setName(string name) {
this->name = name;
}
int getAge() {
return age;
}
void setAge(int age) {
this->age = age;
}
private:
string name;
int age;
};
class Person {
public:
Person(string name, int age){
this->name = name;
this->age = age;
}
void showInfo() {
cout << "name:" << name << " ,age:" << age << endl;
}
string getName() {
return name;
}
void setName(string name) {
this->name = name;
}
int getAge() {
return age;
}
void setAge(int age) {
this->age = age;
}
Memento* createMemento() {
return new Memento(name, age);
}
void setMemento(Memento* mem) {
name = mem->getName();
age = mem->getAge();
}
private:
string name;
int age;
};
class Caretaker{
public:
Caretaker(Memento *mem){
this->mem = mem;
}
Memento *getMemento(){
return this->mem;
}
void setMemento(Memento *mem){
this->mem = mem;
}
private:
Memento *mem;
};
int main()
{
Person *p = new Person("Peter", 23);
p->showInfo();
Memento *mem = p->createMemento();
Caretaker *care = new Caretaker(mem);
p->setAge(18);
p->showInfo();
p->setMemento(care->getMemento());
p->showInfo();
delete care;
delete mem;
delete p;
return 0;
}