大话设计模式-读书笔记备忘录模式

举个栗子

以保存游戏为例,在玩魂斗罗之前,一般在快到boss的时候,我会先保存游戏的状态。与boss作战时万一游戏挂了。可以利用备忘录恢复到战前状态了。

基本概念

备忘录模式:获取一个对象的某个状态,并且在对象之外保存,使得在需要的情况下恢复对象。(不会破坏封装性) 又叫做快照模式(Snapshot Pattern)或者Token模式,是23种设计模式之一

用例图示

备忘录模式图示

角色分类

  1. Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态,并可使用备忘录恢复内部状态。Originator可以根据需要决定Memento存储自己的哪些内部状态。
  2. Memento(备忘录):负责存储Originator对象的内部状态,并可以防止Originator以外的其他对象访问备忘录。备忘录有两个接口:Caretaker只能看到备忘录的窄接口,他只能将备忘录传递给其他对象。Originator却可看到备忘录的宽接口,允许它访问返回到先前状态所需要的所有数据。
  3. Caretaker(管理者):负责备忘录Memento,不能对Memento的内容进行访问或者操作。

角色职责

发起人
- 创建一个含有当前的内部状态的备忘录对象
- 使用备忘录对象存储内部状态
负责人 管理者
- 负责保存备忘录对象
- 不检查备忘录对象的内容

优缺点

优点

1. 给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。 

2. 实现了信息的封装,使得用户不需要关心状态的保存细节。

缺点

消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。

应用实例

1、后悔药。

2、打游戏时的存档。

3、Windows 里的 ctri + z。

4、IE 中的后退。

5、数据库的事务管理。

总之是一些需要保存/恢复数据地相关状态场景,以及需要提供一个可回滚地操作。

注意事项

1、为了符合迪米特原则,还要增加一个管理备忘录的类。 
2、为了节约内存,可使用原型模式+备忘录模式。

代码实现:

github
备忘录模式

猜你喜欢

转载自blog.csdn.net/u010887126/article/details/81160813
今日推荐