设计模式——备忘录模式

备忘录(Memento)模式:在不破费封装的前提下,获取一个对象的内部状态,并在对象外保存这个状态,可以将该对象恢复到原先保存的状态。



Memeto:备忘录,存储原发器(Originator)对象的内部状态,管理者(Caretaker)只能看到备忘录的窄接口,它只能将备忘录传递给其他对象,原发器能看到宽接口,允许访问备忘录保存的内部数据;
Originator:原发器,创建一个备忘录,用以记录当前时刻它的内部状态;
Caretaker:管理组,负责保存好备忘录,不能对备忘录的内容进行操作或检查;

适用性:
(1)需要保存某个对象某一时刻的部分状态,需要时要能恢复到先去状态;
(2)避免用接口直接得到状态,让对象的实现细节暴露,破坏对象的封装性;

优点:
(1)保持了数据封装性;
(2)简化了原发器;

缺点:
(1)如果备忘录数据过多,创建恢复太频繁,会造成消耗太大(比如一个for循环中);
(2)一些语言可能不支持定义窄接口和宽接口(C++可以使用friend关键字);
(3)管理器不知道备忘录中有多少状态,可能会造成管理器产生大量存储开销;

实现:
(1)在C++中,将原发器Originator作为备忘录Memento的友元,宽接口声明为私有,窄接口声明为公有;
(2)如果备忘录的创建以及返回的顺序是可预测的,则备忘录可以只存储原发器内部状态的增量改变;
(3)要主动管理备忘录的生命周期,不使用了就要立刻删除;
(4)比较简单的场景使用备忘录模式,可以使用原型模式保存备忘录;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值