设计模式之18 - 备忘录模式Memento

来源:互联网 发布:打车软件不合法 编辑:程序博客网 时间:2024/06/07 01:40

        有时候我们需要记录一个对象的状态,用于该对象在某些状况下的恢复,这种模式 我们称之为 备忘录模式

        就像你录一段 婚礼视频,写一篇日记 是一样的, 备忘录模式 类结构图定义如下:

发起人(Originator):需要备份的对象,将自身的属性信息拷贝到一个 备忘录对象,并能够通过备忘录中的属性信息 进行恢复;

备忘录(Memento):保存发起人状态,提供set,get接口进行状态访问;

管理角色(Caretaker):用于管理备忘录对象的实现类。

        在什么情况下需要使用 备忘录模式呢?

1. 功能比较复杂,需要维护或记录属性的对象;

    作者在做Undo、Redo时曾用到过 Memento 来记录复杂的类 和 图元。

2. 需要保存的内容只是对象的一部分属性。

        备忘录模式 可以把复杂的发起人内部信息对其他的对象屏蔽起来,发起人不再需要管理和保存其内部状态的版本。

        同样由于上面的这个原因,发起人并不清楚 备忘录的存储代价,这种情况下的应用就需要事先了解,否则可能较大程度上影响 内存和存储空间,这是必须要注意的。

        一个典型的备忘录模式:

// Memento类定义class Memento{    Memento(Originator o)    {      m_strState = o.state;    }    void setState(const std::string& state)    {         m_strState = state;      }      void getState(std::string& state)    {         state = m_strState;    }    std::string m_strState;}
        备忘录模式 的本质就在于保存和恢复对象的内部状态。
2 0