备忘录模式
定义
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
类图
Originator(生成者)
会在保存自己的最新状态时生成Memento角色。当把以前保存的Memento角色传递给Originator角色时,它会将自己恢复至生产该Memento角色时的状态。
Memento(纪念品、备忘录)
会将Originator角色的内部信息整合在一起。在Memento角色中虽然保存了Originator角色的信息,但它不会像外部公开这些信息。
Memento有以下两种接口(API)
- wide interface-宽接口
Memento提供的“宽接口”是指所有用于获取恢复对象状态信息的方法的集合。由于宽接口会暴露所有Memento的内部信息,因此能够使用款接口的只有Originator角色
- narrow interface-窄接口
Memento为外部的CareTaker提供了“窄接口”。可以通过窄接口获取的Memento的内部信息非常有限,因此可以有效地防止信息泄露
CareTaker
当CareTaker想要保存当前的Originator的状态时,会通知Originator。Originator在接收到通知后会生成Memento的实例并将其返回给CareTake。由于后面可能会用Memento实例来将Originator恢复至原来的状态,因此CareTaker会一直保存Memento实例。
不过CareTaker只能使用Memento两种接口的窄接口,也就是说它无法访问Memento内部的所有信息。它只是将Originator生成的Memento当做一个黑盒子保存起来。
示例
类图
Gamer
1 | public class Gamer { |
Memento
1 | public class Memento { |
Main
1 | public class Main { |