设计模式之备忘录模式📕
不违反封装的情况下,捕获并外化对象的内部状态,以便稍后可以将对象恢复到此状态。
应用场景
必须保存对象状态的快照,以便以后可以将其恢复到该状态
模式结构
模式结构分为三种结构:
- 发起人 (Originator)
负责创建一个有内部状态的备忘录对象。 - 负责人 (Caretaker)
负责保存备忘录内容,但是不检查备忘录的内容。 - 备忘录 (Memento)
保存发起人的内部的状态。
上图中的ActionGame为负责人,负责保存状态,Player为发起人负责主动记录备忘录。
实际场景
在玩单机游戏的时候,在通过一个关卡的时候,系统会记录你当时的状态信息,如果下一关没通过,会自动还原到上一个记录点从新开始。这种情况下就可以使用备忘录模式记录存档状态,并在适当的时候还原状态。针对此处场景,使用下面代码还原。
代码
作为发起者的Player
1 | public class Player { |
作为负责人的ActionGame
1 | public interface Game { |
作为备忘录的Memento
1 | public class Memento { |
客户端程序
1 | public class App { |
在游戏存档后死亡,再重复读存档,得到之前存档之前的状态。游戏不会主动存档和读取存档,只会记录存档中的内容,而玩家会主动从游戏中读取存档,然后恢复到存档的状态。