备忘录模式

备忘录模式

备忘录模式Memento Pattern是在不破坏封装性的前提下,将对象当前的内部状态保存在对象之外,以便以后当需要时能将该对象恢复到原先保存的状态。备忘录模式又叫快照模式,是一种对象行为型模式。

描述#

备忘录模式是关于捕获和存储对象的当前状态的方式,以便以后可以平滑地恢复它。

优点#

  • 提供了一种可以恢复状态的机制,当用户需要时能够比较方便地将数据恢复到某个历史的状态。
  • 实现了内部状态的封装,除了创建它的发起类之外,其他对象都不能够访问这些状态信息。
  • 简化了发起类,发起类不需要管理和保存其内部状态的各个备份,所有状态信息都保存在备忘录中,并由管理者进行管理,这符合单一职责原则。

缺点#

  • 资源消耗大,如果要保存的内部状态信息过多或者特别频繁,将会占用比较大的内存资源。

适用环境#

  • 需要保存/恢复数据的相关状态场景。
  • 提供一个可回滚的操作。

实现#

Copy
// 以文本编辑器为例,该编辑器会不时地保存状态,并且可以根据需要进行恢复。 class EditorMemento { // memento对象将能够保持编辑器状态 constructor(content) { this._content = content; } getContent() { return this._content; } } class Editor { constructor(){ this._content = ""; } type(words) { this._content = `${this._content} ${words}`; } getContent() { return this._content; } save() { return new EditorMemento(this._content); } restore(memento) { this._content = memento.getContent(); } } (function(){ const editor = new Editor() editor.type("This is the first sentence."); editor.type("This is second."); const saved = editor.save(); editor.type("And this is third.") console.log(editor.getContent()); // This is the first sentence. This is second. And this is third. editor.restore(saved); console.log(editor.getContent()); // This is the first sentence. This is second. })();

每日一题#

Copy
https://github.com/WindrunnerMax/EveryDay

参考#

Copy
https://github.com/Byronlee/Design-patterns https://www.runoob.com/design-pattern/memento-pattern.html https://github.com/sohamkamani/javascript-design-patterns-for-humans#-memento
posted @   WindRunnerMax  阅读(86)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示
CONTENTS