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

东莞网站建设公司企业网站制度建设

东莞网站建设公司企业,网站制度建设,贵州省网站建设选哪家,江苏兴力建设集团有限公司网站备忘录模式基础概念备忘录模式(Memento Pattern)是一种行为型设计模式,其核心思想是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便后续可以将该对象恢复到先前保存的状态…

备忘录模式基础概念

备忘录模式(Memento Pattern)是一种行为型设计模式,其核心思想是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便后续可以将该对象恢复到先前保存的状态。备忘录模式通过将状态保存和恢复的责任分离,实现了对象状态管理的封装和解耦。

备忘录模式的核心组件

  1. 原发器(Originator) - 需要保存状态的对象,负责创建和恢复备忘录。
  2. 备忘录(Memento) - 存储原发器的内部状态,通常通过原发器创建并由管理者持有。
  3. 管理者(Caretaker) - 负责保存备忘录,但不能对备忘录的内容进行操作或检查。

备忘录模式的实现

下面通过一个文本编辑器的例子展示备忘录模式的实现:

// 1. 备忘录类 - 存储原发器的状态
class Memento {private final String content;  // 需要保存的状态public Memento(String content) {this.content = content;}public String getContent() {return content;}
}// 2. 原发器 - 文本编辑器
class TextEditor {private String content;  // 内部状态public void setContent(String content) {this.content = content;}public String getContent() {return content;}// 创建备忘录,保存当前状态public Memento createMemento() {return new Memento(content);}// 从备忘录恢复状态public void restoreMemento(Memento memento) {this.content = memento.getContent();}
}// 3. 管理者 - 负责保存备忘录
class History {private final Stack<Memento> mementos = new Stack<>();  // 使用栈保存历史状态public void push(Memento memento) {mementos.push(memento);}public Memento pop() {if (mementos.isEmpty()) {return null;}return mementos.pop();}
}// 4. 客户端代码
public class MementoPatternClient {public static void main(String[] args) {TextEditor editor = new TextEditor();History history = new History();// 编辑文本并保存状态editor.setContent("Hello");history.push(editor.createMemento());editor.setContent("Hello World");history.push(editor.createMemento());editor.setContent("Hello World!");System.out.println("当前内容: " + editor.getContent());  // 输出: Hello World!// 撤销操作editor.restoreMemento(history.pop());System.out.println("撤销一次后的内容: " + editor.getContent());  // 输出: Hello Worldeditor.restoreMemento(history.pop());System.out.println("再撤销一次后的内容: " + editor.getContent());  // 输出: Hello}
}

备忘录模式的变体

  1. 白箱备忘录 - 备忘录的状态对所有类可见,违反封装原则,但实现简单:

    class Memento {private String content;public Memento(String content) {this.content = content;}// 所有类可访问的公共方法public String getContent() {return content;}public void setContent(String content) {this.content = content;}
    }
    
  2. 黑箱备忘录 - 使用内部类和接口实现封装,原发器以外的类无法访问备忘录内容:

    interface MementoInterface {// 空接口,仅用于标识
    }class TextEditor {private String content;// 私有内部类实现备忘录private class EditorMemento implements MementoInterface {private final String savedContent;public EditorMemento(String content) {this.savedContent = content;}private String getSavedContent() {return savedContent;}}public MementoInterface createMemento() {return new EditorMemento(content);}public void restoreMemento(MementoInterface memento) {EditorMemento editorMemento = (EditorMemento) memento;this.content = editorMemento.getSavedContent();}
    }
    
  3. 增量备忘录 - 只保存状态变化的部分,节省内存:

    class IncrementalMemento {private final String addedText;private final int position;public IncrementalMemento(String addedText, int position) {this.addedText = addedText;this.position = position;}// 恢复方法由原发器实现
    }
    

备忘录模式的应用场景

  1. 撤销 / 重做功能 - 如文本编辑器、图形设计工具的历史记录
  2. 事务管理 - 数据库操作的回滚机制
  3. 游戏存档 - 保存游戏进度,支持读取存档
  4. 状态恢复 - 系统崩溃后的恢复点机制
  5. 多级筛选 - 如电商平台的筛选条件保存与恢复
  6. 浏览器历史 - 网页浏览历史的前进 / 后退功能

备忘录模式的优缺点

优点

  • 保持封装性 - 不破坏对象的封装前提下保存和恢复其内部状态
  • 简化原发器 - 原发器不需要管理自己的历史状态,职责更清晰
  • 支持撤销操作 - 可以方便地实现多级撤销和重做功能
  • 状态恢复透明 - 客户端无需关心状态的保存细节
  • 符合开闭原则 - 可以在不修改原发器的情况下新增备忘录类

缺点

  • 资源消耗 - 如果频繁创建备忘录,会占用大量内存
  • 性能问题 - 对于大型对象,保存和恢复状态可能影响性能
  • 管理复杂度 - 管理者需要正确管理备忘录的生命周期
  • 序列化开销 - 如果需要跨进程或持久化保存,可能增加序列化复杂度

使用备忘录模式的注意事项

  1. 控制备忘录大小 - 避免保存过大的对象状态,考虑使用增量备忘录
  2. 限制管理者权限 - 管理者只能保存和传递备忘录,不能修改其内容
  3. 考虑内存管理 - 对于长期保存的备忘录,需要考虑内存回收策略
  4. 处理复杂对象 - 对于包含引用的对象,需要处理深拷贝和浅拷贝问题
  5. 结合其他模式 - 备忘录模式常与命令模式结合实现撤销系统,与迭代器模式结合遍历历史状态
  6. 持久化支持 - 如果需要持久化备忘录,需考虑序列化和版本兼容性

总结

备忘录模式通过将对象状态的保存和恢复封装在独立的备忘录类中,实现了对象状态管理的解耦和封装。它在不破坏对象封装性的前提下,允许对象在需要时恢复到之前的状态,是实现撤销 / 重做功能、事务回滚、游戏存档等场景的理想选择。在实际开发中,合理使用备忘录模式可以提高系统的可维护性和用户体验,但需要注意控制内存消耗和管理复杂度。


文章转载自:

http://KgfD7Ca6.pwgzh.cn
http://i5O0j4lW.pwgzh.cn
http://49VODgkC.pwgzh.cn
http://Ds0gi7mQ.pwgzh.cn
http://6an0XCsC.pwgzh.cn
http://BGCkadr6.pwgzh.cn
http://motkvRbA.pwgzh.cn
http://xrvAREgc.pwgzh.cn
http://PbqoMusu.pwgzh.cn
http://HTGoA5vi.pwgzh.cn
http://HmICnTxD.pwgzh.cn
http://PYKZrChT.pwgzh.cn
http://uYfqLZbx.pwgzh.cn
http://Icxa81dE.pwgzh.cn
http://F0fEYdO0.pwgzh.cn
http://CSwa1fg3.pwgzh.cn
http://2W3tA9zo.pwgzh.cn
http://FLceGtbk.pwgzh.cn
http://WPvAoAKC.pwgzh.cn
http://tEQ0cfhI.pwgzh.cn
http://HcOsDq2F.pwgzh.cn
http://rDMxm7i1.pwgzh.cn
http://U2xjpMCC.pwgzh.cn
http://u7qwp8sK.pwgzh.cn
http://Maoos9ue.pwgzh.cn
http://ArkoGa4V.pwgzh.cn
http://qm0D48qv.pwgzh.cn
http://A1Z36zHw.pwgzh.cn
http://r6vfpTPC.pwgzh.cn
http://lSRULjr0.pwgzh.cn
http://www.dtcms.com/wzjs/744020.html

相关文章:

  • 中国建设银行积分查询网站网站导航栏设计步骤
  • 网站开发系统绿色版网站建设捌金手指下拉十一
  • 0建设营销型网站步骤介绍网页设计快速培训
  • 惠州做网站的南宁网站运营优化平台
  • 网站基础建设强化属地管理责任住房和城乡建设局职责范围
  • 应聘网站开发题目led 网站模板
  • 上海的网站设计公司价格上海青浦网站建设
  • 怎么知道自己网站的权重wordpress增加搜索
  • 做微信扫码网站appstore下载安卓版
  • 福州市建设工程工料机信息网站东莞做公众号的网站
  • 南京做网站xjrkj关键词歌曲
  • 找工作在什么网站找比较好福鼎网站优化公司
  • 网站商品支付怎么做旅游微信网站建设
  • 福州市住房和城乡建设网站浙江城乡建设信息港
  • 医院网站建设方案大全零基础网站建设教学培训
  • 公司怎样做网络推广西安seo技术
  • 佛山营销型网站定制如何在网站上做自动弹出
  • 博客网站建设方案公司网站建设文章
  • 天威虎建设集团官方网站wordpress+空行
  • 大气医院网站源码成都专业网站设计制作
  • 水墨背景风格企业网站模板改变网站的域名空间
  • 姜堰 万邦建设集团网站资深的环保行业网站开发
  • 个人网站怎样申请icp工信部网站备案时间
  • 营销网站型建设多少钱国外黄冈网站推广
  • 做特卖的网站雅美盛典建一个类似亨物说网站建设费用
  • 企业年报系统官网北京谷歌优化
  • 广西网站建设哪里有网站改版 被k
  • asp.net企业门户网站源码分享几个x站好用的关键词
  • 辽宁鹤城建设集团网站wordpress 阅读全文
  • 自建购物网站产品开发流程建议