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

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

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

        设计模式之18 - 备忘录模式Memento_第1张图片

发起人(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;
}
        备忘录模式 的本质就在于保存和恢复对象的内部状态。

你可能感兴趣的:(C++,设计模式)