备忘录模式
备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。
主要作用
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
解决的问题
所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。
使用场景
- 需要保存/恢复数据的相关状态场景。
- 提供一个可回滚的操作。
- 相当于VM虚拟机的快照操作。
实现
发起人(Originator)类
class Originator
{
private:
string state;
public:
string getState()
{
return state;
}
void setState(string state)
{
this->state = state;
}
Memento * CreateMemento()
{
return new Memento(state);
}
void SetMemento(Memento * memento)
{
state = memento->State();
}
void Show()
{
cout<<"State="<<state<<endl;
}
};
备忘录(Memento)类
class Memento
{
private:
string state;
public:
Memento(string state)
{
this->state = state;
}
string State()
{
return state;
}
};
管理者(Caretaker)类
class Caretaker
{
private:
Memento * memento;
public:
Memento * getMemento()
{
return memento;
}
void setMemento(Memento * memento)
{
this->memento = memento;
}
};
客户端程序
int main()
{
Originator * o = new Originator();
o->setState("On");
o->Show();
Caretaker * c = new Caretaker();
c->setMemento(o->CreateMemento());
o->setState("Off");
o->Show();
o->SetMemento(c->getMemento());
o->Show();
}