当我们在实际应用中需要提供撤销机制,当一个对象可能需要再后续操作中恢复其内部状态时,就需要使用备忘录模式。其本质就是对象的序列化和反序列化的过程,支持回滚操作。
<强>作用
强>
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先的状态。
<强>类视图强>
<>强实现强>
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++设计模式之备忘录模式(纪念品)