欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > (二 十 二)趣学设计模式 之 备忘录模式!

(二 十 二)趣学设计模式 之 备忘录模式!

2025/3/9 10:50:25 来源:https://blog.csdn.net/qq_56158663/article/details/146022005  浏览:    关键词:(二 十 二)趣学设计模式 之 备忘录模式!

在这里插入图片描述

目录

    • 一、 啥是备忘录模式?
    • 二、 为什么要用备忘录模式?
    • 三、 备忘录模式的实现方式
    • 四、 备忘录模式的优缺点
    • 五、 备忘录模式的应用场景
    • 六、 总结

🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!
🌟了解访问者模式请看: (二 十 一)趣学设计模式 之 访问者模式!
✨更多请看个人主页: 码熔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 编辑器需要支持撤销/重做功能 📝!

六、 总结

  • 备忘录模式就像给对象创建一个“存档点”,以便在需要的时候可以“读档重来”! 💾+🕹️
  • 优点是保存状态、保护封装性、支持撤销、简化对象! 👍
  • 缺点是增加存储成本、管理备忘录复杂! 👎
  • 适用于需要保存对象状态,并支持撤销操作的场景! 🎯

希望这篇文章能让你彻底理解备忘录模式! 💯 祝你学习愉快! 😄
看完请看:(二 十 三)趣学设计模式 之 解释器模式!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词