备忘录模式
定义:
备忘录模式(Memento Pattern)在一个对象之外保存这个对象的某些状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。
结构图:
代码:
//Originator类
class Originator
{
private:
String state;
public:
void setState(String state)
{
this.state = state;
}
//创建一个备忘录并保存状态
Memento* CreateMemento()
{
return (new Memento(state));
}
//恢复状态
void SetMemento(const Memento& cMemento )
{
state = cMemento.getstate();
}
}
//Memento类
class Memento
{
private:
String state;
public:
Memento(String state)
{
this.state = state;
}
//恢复方法
String* getstate()
{
return this.state;
}
}
//Memento类(管理者)为了符合迪米特原则
class CareTaker
{
private:
Memento* pMemento;
public:
void SetMemento(pMemento* pMemento)
{
this.pMemento = pMemento;
}
}
//客户端
Originator cOriginator;
cOriginator.setState(“ok”);//设置状态:ok
CareTaker cCareTaker;
cCareTaker.SetMemento(cOriginator.CreateMemento);//保存状态给管理者
cOriginator.setState(“notok”);//设置状态为:notok
cOriginator.SetMemento(cCareTaker.pMemento);//恢复状态为ok
使用时机:
需要维护或者记录历史属性的类;
需要保存部分属性时(全部属性请考虑原型模式);
优点:
1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。
2、实现了信息的封装,使得用户不需要关心状态的保存细节。
缺点:如果需要备份的状态数据很大,会非常消耗内存资源。