设计模式——备忘录模式

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

设计模式——备忘录模式_第1张图片

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

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

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

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

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

你可能感兴趣的:(读书笔记,设计模式)