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

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

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

        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值