备忘录模式是行为模式之一,它的作用是保存对象内部状态,并在需要时,恢复对象以前的状态。相当于我们文档编辑中的撤销操作。备忘录模式的用意是定义一个外部类用于存储原对象内部状态的一个快照,即在不破坏封装的条件下,将一个对象的当前状态在外部存储下来,从而可以在适当时候把这个对象还原到原来的状态。
优点: 1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。 2、实现了信息的封装,使得用户不需要关心状态的保存细节。
缺点:消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。
类图如下:
示例代码如下:
#include <iostream>
#include <string>
#include <queue>
using namespace std;
/* 备忘录的节点 */
class Memo
{
public:
string state;
Memo(string state)
{
this->state = state;
}
};
/* 备忘录集合 */
class Caretaker
{
public:
vector<Memo*> memo;
/* 保存某一条记录 */
void save(string s)
{
memo.push_back(new Memo(s));
}
/* 获取指定的一条记录 */
string getMemo(int i)
{
return memo[i]->state;
}
};
class Person
{
public:
string state;
void saveState(string s)
{
state = s;
}
string getState()
{
return state;
}
void show()
{
cout<<"我此时的状态是:"<<state<<endl;
}
};
int main()
{
Person* p = new Person;
Caretaker* ct = new Caretaker;
p->saveState("生气");
ct->save(p->getState());
p->saveState("开心");
ct->save(p->getState());
p->saveState("幸灾乐祸");
ct->save(p->getState());
p->saveState("难过");
ct->save(p->getState());
p->saveState(ct->getMemo(0));
p->show();
p->saveState(ct->getMemo(1));
p->show();
p->saveState(ct->getMemo(2));
p->show();
p->saveState(ct->getMemo(3));
p->show();
delete p;
delete ct;
system("pause");
return 0;
}
运行结果如下: