备忘录模式

定义:

  备忘录模式(Memento Pattern)在一个对象之外保存这个对象的某些状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。

结构图: 

 

 

代码:

//Originator类

class Originator

{

private:

   String state;

public:

  void setState(String state)

  {

    this.state = state;

  }

  //创建一个备忘录并保存状态

  Memento* CreateMemento()

  {

    return (new Memento(state));

  }

  //恢复状态

  void SetMemento(const Memento& cMemento )

  {

    state = cMemento.getstate();

  }

}

//Memento类

class Memento

{

private:

   String state;

public:

  Memento(String state)

  {

    this.state = state;

  }

  //恢复方法

  String* getstate()

  {

    return this.state;

  }

}

//Memento类(管理者)为了符合迪米特原则

class CareTaker

{

private:

  Memento* pMemento;

public:

  void SetMemento(pMemento* pMemento)

  {

    this.pMemento = pMemento;

  }

}

//客户端 

Originator cOriginator;

cOriginator.setState(“ok”);//设置状态:ok

CareTaker cCareTaker;

cCareTaker.SetMemento(cOriginator.CreateMemento);//保存状态给管理者

cOriginator.setState(“notok”);//设置状态为:notok

cOriginator.SetMemento(cCareTaker.pMemento);//恢复状态为ok

 

使用时机:

  需要维护或者记录历史属性的类;

  需要保存部分属性时(全部属性请考虑原型模式);

 

优点:

1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。

2、实现了信息的封装,使得用户不需要关心状态的保存细节。

 

缺点:如果需要备份的状态数据很大,会非常消耗内存资源。