模式定义:
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。
使用动机:
在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公用接口来让其它对象得到对象的状态,便会暴露对象的细节实现。
class Memento
{
private:
string m_state;
//...
public:
Memento() { }
Memento(const string &state) : m_state(state) { }
string getState() const { return m_state; }
void setState(const string &state) { m_state = state; }
};
class Originator
{
private:
string m_state;
//...
public:
Originator() { }
Memento createMemento()
{
Memento memento;
memento.setState(m_state);
return memento;
}
void setMemento(const Memento &memento)
{
m_state = memento.getState();
}
};