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

asp网站源代码百度做网站为什么上阿里云备案

asp网站源代码,百度做网站为什么上阿里云备案,wordpress图片后加载,公众号登录平台登录入口前言 有时候,我们真希望人生能有“CtrlZ”。在日常生活中,我们经常使用“撤销”功能,例如在写 Word、画图、写代码时一不小心操作失误,就希望能回到之前的状态。这种**“状态快照 恢复”**机制,在设计模式中就叫做&a…

前言

有时候,我们真希望人生能有“Ctrl+Z”。在日常生活中,我们经常使用“撤销”功能,例如在写 Word、画图、写代码时一不小心操作失误,就希望能回到之前的状态。这种**“状态快照 + 恢复”**机制,在设计模式中就叫做:备忘录模式(Memento Pattern)

本文将通过一个现实场景——写小说与撤销编辑操作,来贯穿讲解备忘录模式,并用 Java 代码实现一套完整的例子,让你在概念与实践中都收获满满。

一、备忘录模式是什么

定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后将其恢复。

换句话说,它是实现“撤销(Undo)”、“回退(Rollback)”、“恢复(Recover)”的核心设计模式。

二、小说家与“撤销按钮”

想象你是个小说作者,每天都在写小说的草稿。

  • 每写一段内容,你都可以“保存一下”(打个草稿快照);
  • 写崩了?你就点击“撤销”,恢复之前保存的状态;
  • 每一个“保存”其实就是一个备忘录对象(Memento)
  • 你就是“发起者(Originator)”;
  • 草稿箱(Caretaker)里存着所有的“保存记录”。

三、核心结构类比

角色名类比于现实作用说明
Originator小说作者拥有真实内容和状态,可以保存或恢复
Memento每一段草稿状态快照,保存了当前文本
Caretaker草稿箱保存多个草稿,但不关心内容细节

四、Java 实例

如下以java来实现:小说草稿的撤销与恢复

Memento:草稿快照

// 草稿状态(备忘录)
public class DraftMemento {private final String content;public DraftMemento(String content) {this.content = content;}public String getContent() {return content;}
}

Originator:小说作者

// 发起者,写小说的作者
public class Author {private String content;public void write(String text) {this.content = text;System.out.println("🖊️ 当前写作内容:" + content);}public DraftMemento saveDraft() {System.out.println("📁 保存草稿");return new DraftMemento(content);}public void restoreDraft(DraftMemento memento) {this.content = memento.getContent();System.out.println("↩️ 恢复到草稿:" + content);}public String getContent() {return content;}
}

Caretaker:草稿箱

import java.util.Stack;// 草稿箱,负责保存多个版本
public class DraftCaretaker {private final Stack<DraftMemento> drafts = new Stack<>();public void save(DraftMemento draft) {drafts.push(draft);}public DraftMemento undo() {if (!drafts.isEmpty()) {return drafts.pop();}return null;}public boolean hasHistory() {return !drafts.isEmpty();}
}

测试主类:模拟写作与撤销

public class MementoDemo {public static void main(String[] args) {Author author = new Author();DraftCaretaker caretaker = new DraftCaretaker();author.write("故事的开始:从前有座山");caretaker.save(author.saveDraft());author.write("故事第二章:山里有个庙");caretaker.save(author.saveDraft());author.write("故事第三章:庙里住着老和尚和小和尚");System.out.println("\n⚠️ 写崩了!撤销!");if (caretaker.hasHistory()) {author.restoreDraft(caretaker.undo());  // 撤销到第二章}System.out.println("\n📄 当前内容:" + author.getContent());}
}

输出示例

🖊️ 当前写作内容:故事的开始:从前有座山
📁 保存草稿
🖊️ 当前写作内容:故事第二章:山里有个庙
📁 保存草稿
🖊️ 当前写作内容:故事第三章:庙里住着老和尚和小和尚⚠️ 写崩了!撤销!
↩️ 恢复到草稿:故事第二章:山里有个庙📄 当前内容:故事第二章:山里有个庙

五、UML图

在这里插入图片描述

@startuml
title 备忘录模式(Memento Pattern)UML 类图class Author {- content: String+ write(text: String): void+ saveDraft(): DraftMemento+ restoreDraft(memento: DraftMemento): void+ getContent(): String
}class DraftMemento {- content: String+ getContent(): String
}class DraftCaretaker {- drafts: Stack<DraftMemento>+ save(m: DraftMemento): void+ undo(): DraftMemento+ hasHistory(): boolean
}Author --> DraftMemento : 创建备份
DraftCaretaker --> DraftMemento : 保存 & 提取
Author --> DraftCaretaker : 恢复状态

六、适用场景一览

场景描述
编辑器的撤销重做文本编辑、画图软件
游戏存档系统保存玩家状态,失败后恢复
数据库事务回滚恢复操作前的状态
配置修改回滚系统设置、软件参数

七、小结

优点:

  • 不破坏封装性,内部状态对外透明
  • 实现撤销/恢复简单灵活
  • 多状态历史管理方便

注意事项:

  • 每次保存都会占用内存,可能引起性能开销
  • 状态对象较大时,建议存储增量而非全量

备忘录模式就像我们生活中的“后悔药”,
它帮你把时间打包,瓶中封印,
等你想“回到昨天”,只需轻轻一唤。

八、参考

《23种设计模式概览》
在这里插入图片描述

http://www.dtcms.com/wzjs/540426.html

相关文章:

  • 网站开发就业薪酬重庆媒体网站建设单价
  • wordpress速度郑州网站优化外包
  • 创造网站模板自助建站网站制作
  • 潍坊网站建设哪家强低代码开发平台 开源
  • 江门网站推广公司申请一个网站得多钱
  • 南同网站建设自己的网站怎么做下载链接
  • dz论坛网站需要制图软件免费
  • 监控摄像机网站建设成都住建局官网住建智慧建管
  • app网站开发案例网站建设为什么有些100元的
  • 有域名了如何做网站怎么编辑网站源码
  • 杭州网站建设企业asp装修网站源码
  • 做营销看的网站企业建设网站公司排名
  • 网站建设中的咨询服务网站开发
  • 包就业的培训机构淄博网站优化资讯
  • 清新区住房和城乡建设部网站做网站是com还是cn好
  • 深圳装饰企业前50强常州谷歌优化
  • 天津做网站建设的公司汕头招聘网官网登录
  • 西峡微网站建设百度电脑版下载官网
  • 购物网站建设源码有一个专门做演讲的网站
  • 百度网站排名怎么提高深圳seo优化推广公司
  • 网站支付怎么做的wordpress php mysql
  • 如何做律师网站网站设计公司哪个好
  • html网站模板wordpress设置默认首页
  • 建企业网站程序系统wordpress 打商插件
  • 公司如何做网站推广个人能申请网站吗
  • 网站建设 锋云科技有什么网站可以接活做设计标志
  • 域名归属查询wordpress 链接优化
  • 西安SEO网站推广品牌如何打造
  • 做seo对网站推广有什么作用青岛营销型网站建设
  • 中山 网站建设一条龙做动画相册在哪个网站好