一、备忘录模式简介
1. 什么是备忘录模式
备忘录模式又称快照模式或者Token模式,属于***行为模式***,备忘录模式定义:
在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
简而言之,备忘录模式的目的在于记录某对象在某一时刻的状态,当对象状态发生改变后,通过该备忘录再恢复到当前状态的方法模式。
2. 用途
备忘录模式的用途主要是方便对象回退到之前的某个状态,在生活中有以下例子可以比较清楚的理解备忘录模式的本质:
- 游戏中的存档、退档;
- Windows系统或者Word等编辑器的+功能;
- 浏览器中的回退页面功能;
- 数据库中的备份、回滚功能;
- 棋类游戏的悔棋功能;
通过上述例子即可清晰的看出,备忘录模式旨在记录之前的状态。
3.备忘录模式的优缺点
作为一种对象行为型模式,备忘录模式的主要优点如下:
- 提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。
- 实现了内部状态的封装。除了创建它的发起人之外,其他对象都不能够访问这些状态信息。
- 简化了发起人类。发起人不需要管理和保存其内部状态的各个备份,所有状态信息都保存在备忘录中,并由管理者进行管理,这符合单一职责原则。
缺点也比较明显:
- 如果要保存的状态比较多,将会使占用的内存资源比较大,浪费内存资源。
二、备忘录模式的实现
1. 涉及的角色
-
发起人(Originator):
-
发起人提供当前状态给备忘录,即备忘录记录的是发起人的状态;
-
发起人负责提供状态、提供创建备忘录、恢复备忘录等功能;
-
它可以访问备忘录中的所有信息。
-
-
备忘录(Memento):
- 备忘录负责记录发起人的状态;在发起人需要的时候提供所有信息给发起人
-
管理者(Caretaker):
- 管理者对备忘录进行管理;
- 提供保存和获取备忘录功能;
- 管理者不可访问备忘录信息;
2. 示例代码(Java版)
-
发起人(Originator):
-
备忘录(Memento):
-
管理者(Caretaker):
-
测试类:
-
测试结果