做网站购买域名,在哪建设网站,做风能的网站,服务器网站跳转怎么做目录 一、 啥是备忘录模式#xff1f;二、 为什么要用备忘录模式#xff1f;三、 备忘录模式的实现方式四、 备忘录模式的优缺点五、 备忘录模式的应用场景六、 总结 #x1f31f;我的其他文章也讲解的比较有趣#x1f601;#xff0c;如果喜欢博主的讲解方式#xff0c;… 目录 一、 啥是备忘录模式二、 为什么要用备忘录模式三、 备忘录模式的实现方式四、 备忘录模式的优缺点五、 备忘录模式的应用场景六、 总结 我的其他文章也讲解的比较有趣如果喜欢博主的讲解方式可以多多支持一下感谢 了解访问者模式请看 (二 十 一)趣学设计模式 之 访问者模式 ✨更多请看个人主页 码熔burning 这篇文章带你详细认识一下设计模式中的备忘录模式
一、 啥是备忘录模式
想象一下你在玩一个游戏 你打到了一个很高的分数但是你怕后面会失误导致分数降低 。 这时候你可以保存一个游戏存档 这样即使你后面失误了也可以读档回到之前的状态 ️。
备忘录模式就是在不破坏封装性的前提下捕获一个对象的内部状态并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态 简单来说就是给对象做一个“快照”方便以后恢复 。
简单来说就是给对象创建一个“存档点”以便在需要的时候可以“读档重来” ️
你需要保存一个对象的内部状态以便以后可以恢复 就像你需要保存游戏存档以便在失误后可以读档 你不想破坏对象的封装性 就像你不想直接访问游戏内部的数据而是通过存档来保存状态 你需要支持撤销操作 就像你需要支持游戏中的“悔棋”功能
二、 为什么要用备忘录模式
用备忘录模式好处多多
保存状态 可以保存对象的内部状态方便以后恢复 保护封装性 不破坏对象的封装性 支持撤销 可以支持撤销操作 简化对象 可以将复杂的对象状态存储到备忘录中简化对象本身
三、 备忘录模式的实现方式
备忘录模式主要包含以下几个角色
发起人Originator 创建备忘录并使用备忘录恢复自身状态 ️。备忘录Memento 存储发起人的内部状态 。管理者Caretaker 负责保存备忘录但不检查备忘录的内容 。
代码示例
// 备忘录游戏存档
class GameMemento {private int score; // 分数private int level; // 关卡public GameMemento(int score, int level) {this.score score;this.level level;}public int getScore() {return score;}public int getLevel() {return level;}
}// 发起人游戏角色
class GameRole {private int score; // 分数private int level; // 关卡public GameRole(int score, int level) {this.score score;this.level level;}public int getScore() {return score;}public void setScore(int score) {this.score score;}public int getLevel() {return level;}public void setLevel(int level) {this.level level;}// 创建备忘录public GameMemento createMemento() {return new GameMemento(score, level);}// 从备忘录恢复状态public void restoreMemento(GameMemento memento) {this.score memento.getScore();this.level memento.getLevel();}// 显示游戏状态public void display() {System.out.println(当前分数 score 当前关卡 level);}
}// 管理者存档管理器
class Caretaker {private GameMemento memento; // 备忘录public GameMemento getMemento() {return memento;}public void setMemento(GameMemento memento) {this.memento memento;}
}// 客户端
public class Client {public static void main(String[] args) {GameRole gameRole new GameRole(1000, 5); // 创建游戏角色gameRole.display(); // 显示游戏状态Caretaker caretaker new Caretaker(); // 创建存档管理器caretaker.setMemento(gameRole.createMemento()); // 保存游戏存档gameRole.setScore(500); // 游戏失误分数降低gameRole.setLevel(3); // 关卡降低gameRole.display(); // 显示游戏状态gameRole.restoreMemento(caretaker.getMemento()); // 读档gameRole.display(); // 显示游戏状态}
}分析
GameMemento 是备忘录存储了游戏角色的分数和关卡。GameRole 是发起人可以创建备忘录并使用备忘录恢复自身状态。Caretaker 是管理者负责保存备忘录。
输出结果
当前分数1000当前关卡5
当前分数500当前关卡3
当前分数1000当前关卡5四、 备忘录模式的优缺点
优点
保存状态 保护封装性 支持撤销 简化对象
缺点
增加了存储成本需要存储备忘录 管理备忘录可能会比较复杂
五、 备忘录模式的应用场景
需要保存一个对象的内部状态以便以后可以恢复 就像你需要保存游戏存档以便在失误后可以读档 需要支持撤销操作 就像你需要支持游戏中的“悔棋”功能 需要在事务管理中实现回滚操作 就像数据库事务需要支持回滚操作 需要在编辑器中实现撤销/重做功能 就像 Word 编辑器需要支持撤销/重做功能
六、 总结
备忘录模式就像给对象创建一个“存档点”以便在需要的时候可以“读档重来” ️优点是保存状态、保护封装性、支持撤销、简化对象 缺点是增加存储成本、管理备忘录复杂 适用于需要保存对象状态并支持撤销操作的场景
希望这篇文章能让你彻底理解备忘录模式 祝你学习愉快 看完请看(二 十 三)趣学设计模式 之 解释器模式