单位的网站建设费会计处理,wordpress页面编辑教程视频,网站建设风景课程设计报告,网站定制设计服务需要使用的技术说明
备忘录模式是一种行为型设计模式#xff0c;通过捕获一个对象的内部状态#xff0c;并在该对象之外保存这个状态#xff0c;以便在需要时恢复对象到原先的状态。备忘录模式包含三个核心角色#xff1a;。
发起人#xff08;Originator#xff09;#xff1a;负责…说明
备忘录模式是一种行为型设计模式通过捕获一个对象的内部状态并在该对象之外保存这个状态以便在需要时恢复对象到原先的状态。备忘录模式包含三个核心角色。
发起人Originator负责创建一个备忘录并记录当前对象的内部状态到备忘录中。备忘录Memento负责存储发起人对象的内部状态提供给发起人对象恢复内部状态的方法。负责人Caretaker负责保存备忘录可以使用备忘录来回滚对象的状态。
备忘录模式的核心思想是将对象的状态保存在一个独立的对象中以便以后恢复。通过使用备忘录模式我们可以轻松地实现对象状态的保存和恢复同时也提高了系统的可维护性和扩展性。
优点
它提供了一种可以在不破坏封装性的情况下恢复对象状态的方法。它简化了发起人对象的设计避免了复杂的状态管理。它可以在不影响客户端的情况下实现对象的历史记录和撤销操作。
缺点
需要消耗一定的内存空间来存储备忘录对象。如果发起人对象的状态非常庞大那么备忘录对象的存储和恢复操作可能会很昂贵。
使用场景
需要保存和恢复对象状态的场景例如游戏中的存档功能、文档编辑器的撤销和恢复功能等。需要提供对象的历史记录和撤销功能的场景例如文本编辑器中的编辑历史记录、Web浏览器中的前进和后退功能等。
示例
下面以一个游戏存档的例子来说明备忘录模式的实现。
首先我们定义游戏类Game其中包含当前游戏的状态信息和对状态进行修改和恢复的方法
public class Game {private String level;private int score;public Game(String level, int score) {this.level level;this.score score;}public String getLevel() {return level;}public void setLevel(String level) {this.level level;}public int getScore() {return score;}public void setScore(int score) {this.score score;}public void printStatus() {System.out.println(当前游戏状态level level , score score);}// 创建备忘录public Memento createMemento() {return new Memento(level, score);}// 从备忘录中恢复状态public void restoreMemento(Memento memento) {this.level memento.getLevel();this.score memento.getScore();}
}
然后我们定义备忘录类Memento用于存储游戏状态
public class Memento {private String level;private int score;public Memento(String level, int score) {this.level level;this.score score;}public String getLevel() {return level;}public int getScore() {return score;}
}
最后我们定义管理者类Caretaker用于保存游戏状态的备忘录并支持回溯和恢复操作
import java.util.Stack;public class Caretaker {private StackMemento mementoStack new Stack();// 保存当前状态public void save(Game game) {mementoStack.push(game.createMemento());}// 回溯到上一个状态public void undo(Game game) {if (!mementoStack.isEmpty()) {game.restoreMemento(mementoStack.pop());}}// 恢复到最初状态public void reset(Game game) {mementoStack.clear();game.setLevel(简单);game.setScore(0);}
}
现在我们可以创建游戏对象、备忘录对象和管理者对象进行游戏状态的保存、回溯和恢复
public class MementoExample {public static void main(String[] args) {// 创建游戏对象Game game new Game(简单, 0);// 创建管理者对象Caretaker caretaker new Caretaker();// 保存当前状态caretaker.save(game);// 改变游戏状态game.setLevel(普通);game.setScore(100);// 保存当前状态caretaker.save(game);// 改变游戏状态game.setLevel(困难);game.setScore(200);// 保存当前状态caretaker.save(game);// 回溯到上一个状态caretaker.undo(game);game.printStatus(); // 当前游戏状态level普通, score100// 回溯到最初状态caretaker.reset(game);game.printStatus(); // 当前游戏状态level简单, score0}
}
现在我们可以创建游戏对象、备忘录对象和管理者对象进行游戏状态的保存、回溯和恢复 当前游戏状态level普通, score100 当前游戏状态level简单, score0