备忘录械(MEmento)模式又称标记(Token)模式。定义:在不破坏封闭性的前提下,捕获一个对象的内部状态,并在该对象之 外保存这个状态。这样以后就可将该对象到原先保存的状态。
组成:
1. 备忘录(Memento)角色:备忘录角色存储“备忘发起角色”的内部状态。
2. 备忘发起(Originator)角色:“备忘发起角色”创建一个备忘录,用以记录当前时刻它的内部状态。在需要时使用备忘录恢复内部状态。
3. 备忘录管理者(Caretaker)角色:负责保存好备忘录。不能对备忘录的内容进行操作或检查。
typedef std::string State;
class Memento;
Class Originator{
Originator(const Sate& rState)
: m_State(rState)
{
}
Originator(){}
~Originator(){}
Memnto* CreateMemento(){return new Memento(m_State); }
Void SetMemento(Memento *pMemento){}
State GetState(){return m_State; }
Void SetState(const State& rState){ m_State = rState; }
Void RestoreState(Memento* pMemento){
if (NULL != pMemento)
{
m_State = pMemento->GetState();
}
}
Void PrintState()
{
std::cout << "State = " << m_State << std::endl;
}
};
Class Memento{
Private:
Friend class Originator;
Memento(const State& rState)
{
}
Void SetState(const State& rState)
: m_State(rState)
{
}
State GetState()
{
return m_State;
}
State m_State;
};
int main()
{
// 创建一个原发器
Originator* pOriginator = new Originator("old state");
pOriginator->PrintState();
// 创建一个备忘录存放这个原发器的状态
Memento *pMemento = pOriginator->CreateMemento();
// 更改原发器的状态
pOriginator->SetState("new state");
pOriginator->PrintState();
// 通过备忘录把原发器的状态还原到之前的状态
pOriginator->RestoreState(pMemento);
pOriginator->PrintState();
delete pOriginator;
delete pMemento;
return 0;
}