虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > C/C++编程 > C++设计模式之备忘录模式(Memento)

C++设计模式之备忘录模式(Memento)
类别:C/C++编程   作者:码皇   来源:互联网   点击:

这篇文章主要为大家详细介绍了C++设计模式之备忘录模式Memento的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

作用

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

类视图

实现

    typedef struct sysstate;
    //假设的一个空结构,用来代表系统状态//还原点class Memento{
    public: Memento(sysstate &statein) {
    state = statein;
    }
    sysstate& getstate(){
    return state}
    private: sysstate state;
    }
    ;
    //运行系统class system{
    public: void recovery(Memento* pMem) {
    if (pMem) {
    state = pMem->getstate();
    }
    }
    Memento* backup() {
    return new Memento(state);
    }
    private: sysstate state;
    }
    ;
    //还原控制器class recoveryControl{
    public: ~recoveryControl() {
    map<long,Memento*>::iterator iter;
    for ( iter = m_mementos.begin();
    iter != m_mementos.end();
    iter++) {
    delete iter.second;
    }
    }
    long addRecoveryPoint(Memento* pMem) {
    long t = clock();
    m_mementos.instert(pair<long,Memento*>(t, pMem));
    return t;
    }
    Memento* GetRecoveryPoint(long time) {
    map<long,Memento*>::iterator iter;
    iter = m_mementos.find(time);
    if(iter != m_mementos.end()) return iter->second;
    return NULL;
    }
    void DelRecoveryPoint(long time) {
    Memento* pMem = GetRecoveryPoint(time);
    m_mementos.erase(time);
    delete pMem;
    }
    private: map<long,Memento*> m_mementos;
    }
    ;
    int main(){
    system Sys;
    recoveryControl controler;
    //备份系统并存入备份管理器中 long time1 = controler.addRecoveryPoint(Sys.backup());
    long time2 = controler.addRecoveryPoint(Sys.backup());
    //将系统恢复到time1状态 Sys.recovery(controler.GetRecoveryPoint(time1));
    //将系统恢复到time2状态 Sys.recovery(controler.GetRecoveryPoint(time2));
    }

应用场景

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

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

您可能感兴趣的文章:

  • 设计模式中的备忘录模式解析及相关C++实例应用
  • C++设计模式之备忘录模式
  • C++设计模式之桥接模式(Bridge)
  • C++设计模式之组合模式(Composite)
  • C++设计模式之享元模式(Flyweight)
  • C++设计模式之策略模式(Strategy)
  • C++设计模式之模板方法模式(TemplateMethod)
  • C++设计模式之观察者模式(Observer)
  • C++设计模式之迭代器模式(Iterator)
  • C++设计模式之适配器模式(Adapter)
相关热词搜索: C++ 设计模式 备忘录模式