备忘录模式
1. 备忘录模式:
备忘录:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
2. 备忘录模式解析:
适用场合?
比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Originator可以根据保存的Memo信息还原到前一状态。
缺点:
角色状态需要完整存储到备忘录对象中,如果状态数据很大很多,那么在资源消耗上,备忘录对象会非常耗内存。
3. 备忘录模式的例子:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Memo//备忘录,负责存储Originator对象的内部状态
{
public:
string state;
Memo(string state)
{
this->state=state;
}
};
class Originator//发起人,负责创建一个备忘录
{
public:
string state; //需要保存的属性,可能有几个
void setMemo(Memo *memo)//恢复备忘录
{
state=memo->state;
}
Memo *createMemo()//创建备忘录,将需要保存的信息导入
{
return new Memo(state);
}
void show()
{
cout<<state<<endl;
}
};
class Caretaker//管理者,负责保存备忘录
{
public:
vector<Memo *> memo;
void save(Memo *memo)
{
(this->memo).push_back(memo);
}
Memo *getState(int i)
{
return memo[i];
}
};
int main()
{
Originator *og=new Originator();
Caretaker *ct=new Caretaker();
og->state="on";
og->show();
ct->save(og->createMemo());
og->state="off";
og->show();
ct->save(og->createMemo());
og->state="middle";
og->show();
ct->save(og->createMemo());
og->setMemo( ct->getState(2) );
og->show();
return 0;
}