当前位置: 首页 > news >正文

定远县可以做网站的地方厦门城乡住房建设厅网站首页

定远县可以做网站的地方,厦门城乡住房建设厅网站首页,工作室图片 实拍,互联网创业项目的效果Java 备忘录模式(Memento Pattern)详解 🧠 什么是备忘录模式? 备忘录模式是一种行为型设计模式,它允许在不暴露对象实现细节的情况下,保存和恢复对象的状态。备忘录模式常常用于需要记录对象状态以便随时…

Java 备忘录模式(Memento Pattern)详解

🧠 什么是备忘录模式?

备忘录模式是一种行为型设计模式,它允许在不暴露对象实现细节的情况下,保存和恢复对象的状态。备忘录模式常常用于需要记录对象状态以便随时恢复的场景,如实现撤销操作、版本控制等。


🎯 使用场景

  • 需要保存对象的状态,以便以后恢复
  • 支持对象的撤销功能
  • 对象的状态改变需要被保存,且不希望暴露给外部

🏗️ 模式结构

  • Memento(备忘录):存储对象的内部状态,可以将状态保存在对象中
  • Originator(发起人):创建备忘录,保存当前的内部状态,并可以恢复到先前保存的状态
  • Caretaker(看护者):负责保存备忘录,但不能修改备忘录的内容,仅能调用恢复功能

✅ 示例:编辑器撤销操作

备忘录类

public class Memento {private String state;public Memento(String state) {this.state = state;}public String getState() {return state;}
}

发起人类

public class Editor {private String content;public void setContent(String content) {this.content = content;}public String getContent() {return content;}public Memento saveState() {return new Memento(content);}public void restoreState(Memento memento) {this.content = memento.getState();}
}

看护者类

import java.util.ArrayList;
import java.util.List;public class Caretaker {private List<Memento> mementoList = new ArrayList<>();public void addMemento(Memento memento) {mementoList.add(memento);}public Memento getMemento(int index) {return mementoList.get(index);}
}

客户端

public class Client {public static void main(String[] args) {Editor editor = new Editor();Caretaker caretaker = new Caretaker();editor.setContent("Hello");caretaker.addMemento(editor.saveState());  // 保存当前状态editor.setContent("Hello, World!");caretaker.addMemento(editor.saveState());  // 保存新状态System.out.println("Current Content: " + editor.getContent());  // 输出:Hello, World!editor.restoreState(caretaker.getMemento(0));  // 恢复到旧状态System.out.println("Restored Content: " + editor.getContent());  // 输出:Hello}
}

✅ 优点

  • 可以保存和恢复对象的状态,支持撤销操作
  • 发起人对象不需要暴露其内部实现细节
  • 备忘录对象是只读的,不可以修改,有助于封装状态

⚠️ 缺点

  • 如果备忘录保存了过多的状态,可能会占用大量内存
  • 增加了类的数量,导致系统复杂度增加

🧩 使用建议

备忘录模式适合需要记录对象状态并支持恢复功能的场景,如文本编辑器的撤销操作、游戏的存档功能等。

http://www.dtcms.com/a/457658.html

相关文章:

  • JavaScript中的DOM操作
  • OpenAI DevDay 2025:ChatGPT 进化为平台,开启 AI 应用新纪元
  • 什么是模型微调
  • 郑州网站高端设计游戏官方网站开发设计报告
  • 如何用网站模板建设网站杭州网站建设哪家最好
  • 美团网站除佣金表格怎么做上海大型网站建设公司排名
  • 【C++】异常--学习笔记
  • 【linux内核驱动day05】
  • 富煌钢构:“T+EPC”模式引领钢结构行业变革
  • 前端学习 JavaScript
  • 深圳约的网站设计企业申报系统
  • 吴江盛泽建设局网站一个专门做标题的网站
  • PID公式的部署与选择
  • 拼多多前端面试题及参考答案(200道-下)
  • Symmetric functions and hall polynomials 1.1
  • 深圳seo网站优化广东网约车涨价
  • 【LLM】知识图谱和LLM的结合
  • 扩散模型DDPM数学推导过程完整版(下)
  • 重庆网站建设入门培训扬州电商网站建设
  • 做国际网站有什么需要注意的福州网站建设吧
  • Echarts极坐标系示例
  • HarmonyOS应用开发深度解析:ArkTS语法精要与状态管理实践
  • 园林景观中企动力提供网站建设网店代理货源网
  • 酒店网站建设建设网站ppt
  • docker学习笔记详记
  • 可做外链的视频网站企业建一个网站
  • 滑动窗口专题总结:从懵逼到掌握valid计数器
  • 深圳市盐田区建设局网站WordPress制作安卓
  • Next.js useState useEffect useRef 速记
  • 图论算法刷题的第五十一天