备忘录模式(Memento)
定义: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先状态
类型: 行为型
类图:
组件说明:
-
Originator:发起人,负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可以使用备忘录恢复状态,Originator可
根据需要决定Memento存储Originator的那些内部状态
-
Memento:负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录。备忘录有两个接口,Caretaker
只能看到备忘录的窄接口,它只能将备忘录传递给其他对象。Originator能够看到一个宽接口,允许它访问返回到先前状态所需的所
有数据
-
Caretaker:管理者,负责保存好备忘录Memento,不能对备忘录的内容进行操作或检查
适用场景:
- 需要保存/恢复数据的相关状态场景
- 提供一个可回滚的操作
优点:
- 给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态
- 实现了信息的封装,使得用户不需要关心状态的保存细节。
缺点: 消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存
注意事项:
- 为了符合迪米特原则,还要增加一个管理备忘录的类
- 为了节约内存,可使用原型模式+备忘录模式。