备忘录模式学习笔记

基本概念

备忘录模式(Memento Pattern)是一种行为型模式,它允许在不破坏封装性的前提下捕获并外部化一个对象的内部状态,从而以后可以将该对象恢复到原先保存的状态。

备忘录模式包含三个角色:发起人角色、备忘录角色和负责人角色。发起人角色负责创建备忘录,并记录自己的当前内部状态。负责人角色负责保存备忘录,但不能对备忘录的内容进行修改。备忘录角色负责存储发起人角色的状态。

备忘录模式的优点是可以简化发起人角色的状态管理,同时可以对发起人角色的历史状态进行回滚操作。

实例

下面以游戏角色为例,演示备忘录模式的使用。

发起人角色(GameRole)

发起人角色记录游戏角色的当前状态,并可以创建备忘录和恢复状态。

javaCopy Code
public class GameRole { private int vit; // 生命力 private int atk; // 攻击力 private int def; // 防御力 public GameRole(int vit, int atk, int def) { this.vit = vit; this.atk = atk; this.def = def; } // 定义创建备忘录的方法 public Memento createMemento() { return new Memento(vit, atk, def); } // 定义从备忘录恢复状态的方法 public void restoreFromMemento(Memento memento) { this.vit = memento.getVit(); this.atk = memento.getAtk(); this.def = memento.getDef(); } // 定义打印角色状态的方法 public void display() { System.out.println("角色当前状态:"); System.out.println("生命力:" + vit); System.out.println("攻击力:" + atk); System.out.println("防御力:" + def); } // 定义改变角色状态的方法 public void changeState() { this.vit = 50; this.atk = 80; this.def = 60; } }

备忘录角色(Memento)

备忘录角色存储游戏角色的状态。

javaCopy Code
public class Memento { private int vit; // 生命力 private int atk; // 攻击力 private int def; // 防御力 public Memento(int vit, int atk, int def) { this.vit = vit; this.atk = atk; this.def = def; } public int getVit() { return vit; } public int getAtk() { return atk; } public int getDef() { return def; } }

负责人角色(Caretaker)

负责人角色保存备忘录。

javaCopy Code
public class Caretaker { private Memento memento; public Memento getMemento() { return memento; } public void setMemento(Memento memento) { this.memento = memento; } }

使用备忘录模式的示例

javaCopy Code
// 创建游戏角色 GameRole role = new GameRole(100, 50, 30); role.display(); // 保存当前状态 Caretaker caretaker = new Caretaker(); caretaker.setMemento(role.createMemento()); // 改变状态 role.changeState(); role.display(); // 恢复到之前的状态 role.restoreFromMemento(caretaker.getMemento()); role.display();

输出结果:

Copy Code
角色当前状态: 生命力:100 攻击力:50 防御力:30 角色当前状态: 生命力:50 攻击力:80 防御力:60 角色当前状态: 生命力:100 攻击力:50 防御力:30

在这个示例中,我们创建了一个游戏角色角色,并使用备忘录模式来记录和恢复角色的状态。我们首先打印出角色的原始状态,然后保存当前状态。接着,我们改变角色的状态,再次打印角色的状态,然后恢复到之前保存的状态,再次打印角色的状态。

通过这个示例,我们可以看到备忘录模式的使用方法以及其优点:可以简化状态管理,记录和恢复状态,避免了状态混乱。