备忘录模式 模式引入 问题描述 如果我们玩过 RPG 游戏,就知道在关键时点需要进行存档,否则一不小心就可能给出「大侠,请重新来过」的提示,这就需要有一个存档功能。考虑最简单的实现,直接用一个队列或字典将对应时点的状态存起来就行了,当需要恢复某个历史状态时,将对应的状态取出,更新到当前状态。但是这个「保存」和「恢复」在写程序时会有一些问题,大部分的面向对象语言都不允许对私有成员进行外部访问,这有益于程序的健壮。 模式定义 像刚刚这种情况,当公共接口无法从外部获取一个对象的内部状态,但我们又需要访问和处理它的内部状态,此时可以使用备忘录模式。 备忘录模式(Memento)是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态。