备忘录械(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;

}

posted on 2012-01-11 19:52 柳清风 阅读(167) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


统计