设计模式-备忘录模式(Memento)
一、备忘录模式(Memento)
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。
理解:玩游戏打BOSS前的存档,丝毫不会影响游戏内容。
二、备忘录模式UML图
(1)Originator(发起人):负责创建一个备忘录Menento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。Originator可根据需要决定Menmento存储Originator的哪些内部状态。
(2)Memento(备忘录):负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录Memento。备忘录有两个接口,Caretaker只能看到备忘录的窄接口,它只能将备忘录传递给其他对象。Originator能够看到一个宽接口,允许它访问返回到先前状态所需的所有数据。
(3)Caretaker(管理者):负责保护好备忘录Memento,不能对备忘录的内容进行操作或检查。
三、代码实现
发起人(Originator类)
class Originator{private string state;public string State //需要保存的值,可能有多个{get { return state; }set { state = value; }}public Memento CreatMemento() //创建备忘录,将当前需要保存的信息导入并实例化出一个Memento对象{return (new Memento(state));}public void SetMemento(Memento memento){state = memento.State; //恢复备忘录,将Memento导入并将相关数据恢复}public void Show(){Console.WriteLine("State=" + state); //显示数据}}
备忘录(Menento)类
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; }}}
客户端代码
static void Main(string[] args){Originator o = new Originator(); //Originator初始状态,状态属性喂"On"o.State = "On";o.Show();Caretaker c = new Caretaker();c.Memento = o.CreatMemento(); //保存状态时,由于有了很好的封装,可以隐藏Originator的实现细节o.State = "off"; //Originator改变了状态属性为"Off"o.Show();o.SetMemento(c.Memento); //恢复初始状态o.Show();Console.Read();}
设计模式-备忘录模式(Memento)相关推荐
- 设计模式-备忘录模式(Memento)-Java
设计模式-备忘录模式(Memento)-Java 目录 文章目录 1.前言 2.示例案例-可悔棋的中国象棋 3.备忘录模式概述 3.1.备忘录模式定义 3.2.备忘录模式结构 3.3.备忘录模式结构图 ...
- 设计模式-备忘录模式(Memento)的详解
介绍 关于Java设计模式我们都知道有一种备忘录模式,对于作用看名字大概就知道应该和状态保存有关.本文就从定义到示例代码进行说明详解. 定义 备忘录模式定义:在不破坏封装性的前提下,捕获对象的内部状态 ...
- 【学习笔记】设计模式-备忘录模式(Memento)
文章目录 0 设计模式 1 备忘录模式 2 实现思路 3 需要的类 4 具体实现 4.1 Memento(备忘录) 4.2 Originator(目标对象) 4.3 CareTaker(管理者) 4. ...
- java memento_浅谈Java设计模式——备忘录模式(Memento)
一.概述 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.它实现了对信息的封装,使得客户不需要关心状态保存的细节.保存就要消耗资源 ...
- C++设计模式——备忘录模式(memento pattern)
博主看了许多文章和一些书,发现要么代码不全,要么对备忘录的理解有偏差,要么干脆根本就不是备忘录模式,经过博主查阅十余篇文章和详细研究书本备忘录模式,总结出这篇精华的c++备忘录模式文章,感兴趣的朋友可 ...
- 备忘录模式 Memento 快照模式 标记Token模式 行为型 设计模式(二十二)
备忘录模式 Memento 沿着脚印,走过你来时的路,回到原点. 苦海翻起爱恨 在世间难逃避命运 相亲竟不可接近 或我应该相信是缘份 一首<一生所爱>触动了多少人的心弦,一段五百年都没有结 ...
- 二十四种设计模式:备忘录模式(Memento Pattern)
备忘录模式(Memento Pattern) 介绍 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到保存的状态. 示例 有一个Message实体类 ...
- Python设计模式-备忘录模式
Python设计模式-备忘录模式 代码基于3.5.2,代码如下; #coding:utf-8 #备忘录模式 import randomclass gameCharacter():vitality = ...
- Java设计模式(备忘录模式-解释器模式-状态模式-策略模式-职责链模式)
Java设计模式Ⅶ 1.备忘录模式 1.1 备忘录模式概述 1.2 代码理解 2.解释器模式 2.1 解释器模式概述 3.状态模式 3.1 状态模式概述 3.2 代码理解 4.策略模式 4.1 策略模 ...
- 设计模式 | 备忘录模式及典型应用
本文的主要内容: 介绍备忘录模式 示例 备忘录模式总结 备忘录模式 备忘录模式经常可以遇到,譬如下面这些场景: 浏览器回退:浏览器一般有浏览记录,当我们在一个网页上点击几次链接之后,可在左上角点击左箭 ...
最新文章
- 浅析搜索引擎对网站的抓取规则有哪些方面
- 【数据竞赛】从0梳理1场时间序列赛事!
- android触摸事件透传,Android中父View穿透子View响应长按事件
- 【face-landmarks】人脸关键点检测汇总
- Ubantu键盘快捷键
- BZOJ1734: [Usaco2005 Feb]Aggressive cows 愤怒的牛
- freeBSD的vi
- 用WAP手机远程遥控电脑1
- [数据恢复答疑]删除了WINDOWS桌面上的文件,该如何恢复数据
- 渗透测试各种扫描工具集合(好用)
- 如何用UE4制作2D游戏文档(四)——NPC篇
- 毕业设计总结篇之终结篇——基于android的创意展示平台(混合app)
- [豆瓣8.1]《教养的迷思》父母的教养方式能否决定孩子的人格发展? 【美】朱迪斯•哈里斯...
- Mstar 平台背光时序调试
- Windows 7 旗舰版高效办公 - 驱动安装
- 设置WDS桥接成功,上不了网怎么办?路由器WDS无线桥接设置正确方法
- STM32 PWM输出
- oracle 10g express linux,使用Oracle10g express 版本方案介绍
- python国内下载地址_python下载链接
- poco,c++库学习,日期和时间
热门文章
- 用vulkan写个引擎 (二)vk组件
- C#/VB.NET 自定义PPT动画路径
- 保利清能西海岸收房步骤和费用明细
- Foobar 是什么意思?
- 警惕安全档案的陷阱 | 确认偏见
- 用户的裂变式增长,神秘的病毒系数K是什么样的?
- 酷睿i9-13900K性能出炉Steam游戏开发首选驰网独家i9-13900K服务器水冷定制高主频游戏服务器
- 用启动盘点击修复计算机没有反应,电脑系统教程:u盘插电脑没反应
- 录音文件下载_录音转文字别烦恼,收下这份锦囊,几种方法任你选!
- 软路由工具(ROS, m0n0wall),教程大收集