一、意图:
意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象的外部保存这个状态,这样以后就可将对象恢复到原先保存的状态。
二、类图:
三、组成元素:
i. Memento:备忘录,存储原发器的内部状态。
ii. Originator:原发器,创建一个备忘录,泳衣记录当前时刻它的内部状态并能恢复备忘录的内部状态。
iii. Caretaker:负责人,负责保存好备忘录。
四、实现代码:
#include "Memento.h" #include <iostream> #include <string> typedef std::string State; class Memento { private: friend class Originator; Memento(const State& rState); void SetState(const State& rState); State GetState(); private: State m_State; }; Memento::Memento(const State& rState):m_State(rState) { } State Memento::GetState() { return m_State; } void Memento::SetState(const State& rState) { m_State=rState; } class Originator { public: Originator(const State& rState); Originator(); ~Originator(); Memento* CreateMemento(); void SetMemento(Memento* pMemento); State GetState(); void SetState(const State& rState); void RestoreState(Memento* pMemento); void PrintState(); private: State m_State; }; Originator::Originator() { } Originator::Originator(const State& rState):m_State(rState) { } Originator::~Originator() { } State Originator::GetState() { return m_State; } void Originator::SetState(const State& rState) { m_State=rState; } Memento* Originator::CreateMemento() { return new Memento(m_State); } void Originator::RestoreState(Memento* pMemento) { if (NULL!=pMemento) { m_State=pMemento->GetState(); } } void Originator::PrintState() { std::cout<<"State="<<m_State<<std::endl; } void 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 pMemento; delete pOriginator; }