c++设计模式之备忘录模式(纪念品)

  

当我们在实际应用中需要提供撤销机制,当一个对象可能需要再后续操作中恢复其内部状态时,就需要使用备忘录模式。其本质就是对象的序列化和反序列化的过程,支持回滚操作。

  

<强>作用
  

  

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先的状态。

  

<强>类视图

  

 C + +设计模式之备忘录模式(纪念品)

  

<>强实现

  

        typedef struct sysstate;//假设的一个空结构,用来代表系统状态//还原点   类纪念品   {   公众:   纪念品(sysstate和statein)   {   状态=statein;   }   sysstate&getstate(){}返回状态   私人:   sysstate状态;   };//运行系统   阶级制度   {   公众:   无效的复苏(纪念品* pMem)   {   如果(pMem)   {   状态=pMem→getstate ();   }   }   纪念品*备份()   {   返回新纪念品(状态);   }   私人:   sysstate状态;   };//还原控制器   类recoveryControl   {   公众:   ~ recoveryControl ()   {   map<长,纪念品*祝辞::iterator iter;   (iter=m_mementos.begin ();iter !=m_mementos.end ();iter + +)   {   删除iter.second;   }   }   长addRecoveryPoint(纪念品* pMem)   {   长t=时钟();   m_mementos.instert (pair<长,纪念品*祝辞(t, pMem));   返回t;   }   纪念品* GetRecoveryPoint(长时间)   {   map<长,纪念品*祝辞::iterator iter;      iter=m_mementos.find(时间);      如果(iter !=m_mementos.end ())   返回iter→第二;   返回NULL;   }   空白DelRecoveryPoint(长时间)   {   纪念品* pMem=GetRecoveryPoint(时间);   m_mementos.erase(时间);   删除pMem;   }   私人:   map<长,纪念品*比;m_mementos;   };      int main ()   {   系统系统;   recoveryControl控制器;//备份系统并存入备份管理器中   长time1=controler.addRecoveryPoint (Sys.backup ());   长time2=controler.addRecoveryPoint (Sys.backup ());//将系统恢复到time1状态   Sys.recovery (controler.GetRecoveryPoint (time1));//将系统恢复到time2状态   Sys.recovery (controler.GetRecoveryPoint (time2));      }      之前      

<强>应用场景
  

  

支持回滚操作的地方,如游戏存档,事务回滚,程序的撤销和恢复操作等。

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

c++设计模式之备忘录模式(纪念品)