在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便恢复到原先保存的状态。
【角色】
- 创建备忘录角色(Originator):负责创建一个备忘录,可以记录、恢复自身的内部状态。
- 备忘录角色(Memento):用于存储Originator的内部状态,并且可以防止Originator以外的对象访问Mement。
存储备忘录角色(Caretaker): 负责存储备忘录,不能对备忘录的内容进行操作和访问,只能够将备忘录传递给其他对象。
/*** 存档(备忘录角色)*/public class Memento {// 关卡private int level;public int getLevel() {return level;}public void setLevel(int level) {this.level = level;}public Memento(int level) {this.level = level;}}
/*** 游戏类(创建备忘录角色)*/public class Game {// 关卡private int level;/*** 玩游戏*/public void play () {System.out.println("恭喜你,通过第" + (++level) + "关" );}/*** 游戏存档*/public Memento save() {return new Memento(level);}/*** 恢复游戏* @param memento*/public void restore(Memento memento) {this.level = memento.getLevel();System.out.println("恢复游戏,当前是第" + this.level + "关");}}
/*** 负责管理备忘者类*/public class Caretaker {private Memento memento;/*** 存档*/public void archive(Memento memento) {System.out.println("存档。。。");this.memento = memento;}/*** 获取存档*/public Memento getMemento() {return this.memento;}}
public class MementoTest {public static void main(String[] args) {// 存档管理类Caretaker caretaker = new Caretaker();// 打开游戏Game game = new Game();// 玩了第1关game.play();// 存档caretaker.archive(game.save());// 玩了第2关game.play();// 存档caretaker.archive(game.save());// 读档恢复游戏game.restore(caretaker.getMemento());}}----输出----恭喜你,通过第1关存档。。。恭喜你,通过第2关存档。。。恢复游戏,当前是第2关
