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

设计模式-备忘录

备忘录(Memento)设计模式是为了保存对象当前状态,并在需要的时候恢复到之前保存的状态。以下是一个简单的C#备忘录模式的实现:

// Originator 类,负责创建和恢复备忘录
class Originator
{private string state;public string State{get { return state; }set { state = value; }}public Memento CreateMemento(){// 创建备忘录,保存状态return (new Memento(state));}public void SetMemento(Memento memento){// 恢复状态state = memento.State;}public void Show(){Console.WriteLine("State = " + state);}
}// 备忘录 Memento 类,负责保存 Originator 状态
class Memento
{private string state;public Memento(string state){this.state = state;}public string State{get { return state; }}
}// 管理者 Caretaker 类,负责保存备忘录,不应该对备忘录的内容进行操作和暴露
class Caretaker
{private Memento memento;public Memento Memento{get { return memento; }set { memento = value; }}
}// 客户端代码
class Program
{static void Main(string[] args){// 创建发起人对象Originator originator = new Originator();originator.State = "State #1";originator.Show();// 保存状态Caretaker caretaker = new Caretaker();caretaker.Memento = originator.CreateMemento();// 改变 originator 状态originator.State = "State #2";originator.Show();// 恢复状态originator.SetMemento(caretaker.Memento);originator.Show();Console.ReadKey();}
}

在这个例子中,Originator类负责保存和恢复状态,Memento类负责保存状态,而Caretaker类负责保存Memento对象,不应该对其进行操作。客户端代码演示了如何使用这些类来保存和恢复对象状态。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Django基础知识全解:从模型到视图的完整指南
  • NAS变身云盘管理大师:群晖部署AList全攻略!
  • 花几千上万学习Java,真没必要!(三十四)
  • Selenium Java中的isDisplayed()方法
  • Golang | Leetcode Golang题解之第284题窥视迭代器
  • Docker常用命令--docker run
  • IPSG简介
  • 轻松入门Linux—CentOS,直接拿捏 —/— <2>
  • 【WEB安全】 PHP基础文件知识完整教学中(超详细)
  • 测试面试宝典(三十六)—— 工作中用fiddler来做什么?
  • ubuntu安装dockergitlab
  • 实战:ZooKeeper 操作命令和集群部署
  • Mybatis基础
  • 9000字干货:从消息流平台Serverless之路,看Serverless标准演进
  • Web3.js 4.x版本事件监听详解:从HTTP到WebSocket的迁移
  • exports和module.exports
  • Iterator 和 for...of 循环
  • MD5加密原理解析及OC版原理实现
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • React as a UI Runtime(五、列表)
  • React系列之 Redux 架构模式
  • vue 个人积累(使用工具,组件)
  • XForms - 更强大的Form
  • 分类模型——Logistics Regression
  • 记录:CentOS7.2配置LNMP环境记录
  • 前端技术周刊 2019-01-14:客户端存储
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 我感觉这是史上最牛的防sql注入方法类
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • ​用户画像从0到100的构建思路
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (160)时序收敛--->(10)时序收敛十
  • (2)空速传感器
  • (7)摄像机和云台
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (Java入门)学生管理系统
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (ZT)一个美国文科博士的YardLife
  • (二)c52学习之旅-简单了解单片机
  • (二)WCF的Binding模型
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (四)Android布局类型(线性布局LinearLayout)
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (一)80c52学习之旅-起始篇
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)关于多人操作数据的处理策略
  • (转)原始图像数据和PDF中的图像数据
  • (状压dp)uva 10817 Headmaster's Headache
  • ./configure、make、make install 命令
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Core 中插件式开发实现