一、备忘录模式(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)相关推荐

  1. 设计模式-备忘录模式(Memento)-Java

    设计模式-备忘录模式(Memento)-Java 目录 文章目录 1.前言 2.示例案例-可悔棋的中国象棋 3.备忘录模式概述 3.1.备忘录模式定义 3.2.备忘录模式结构 3.3.备忘录模式结构图 ...

  2. 设计模式-备忘录模式(Memento)的详解

    介绍 关于Java设计模式我们都知道有一种备忘录模式,对于作用看名字大概就知道应该和状态保存有关.本文就从定义到示例代码进行说明详解. 定义 备忘录模式定义:在不破坏封装性的前提下,捕获对象的内部状态 ...

  3. 【学习笔记】设计模式-备忘录模式(Memento)

    文章目录 0 设计模式 1 备忘录模式 2 实现思路 3 需要的类 4 具体实现 4.1 Memento(备忘录) 4.2 Originator(目标对象) 4.3 CareTaker(管理者) 4. ...

  4. java memento_浅谈Java设计模式——备忘录模式(Memento)

    一.概述 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.它实现了对信息的封装,使得客户不需要关心状态保存的细节.保存就要消耗资源 ...

  5. C++设计模式——备忘录模式(memento pattern)

    博主看了许多文章和一些书,发现要么代码不全,要么对备忘录的理解有偏差,要么干脆根本就不是备忘录模式,经过博主查阅十余篇文章和详细研究书本备忘录模式,总结出这篇精华的c++备忘录模式文章,感兴趣的朋友可 ...

  6. 备忘录模式 Memento 快照模式 标记Token模式 行为型 设计模式(二十二)

    备忘录模式 Memento 沿着脚印,走过你来时的路,回到原点. 苦海翻起爱恨 在世间难逃避命运 相亲竟不可接近 或我应该相信是缘份 一首<一生所爱>触动了多少人的心弦,一段五百年都没有结 ...

  7. 二十四种设计模式:备忘录模式(Memento Pattern)

    备忘录模式(Memento Pattern) 介绍 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到保存的状态. 示例 有一个Message实体类 ...

  8. Python设计模式-备忘录模式

    Python设计模式-备忘录模式 代码基于3.5.2,代码如下; #coding:utf-8 #备忘录模式 import randomclass gameCharacter():vitality = ...

  9. Java设计模式(备忘录模式-解释器模式-状态模式-策略模式-职责链模式)

    Java设计模式Ⅶ 1.备忘录模式 1.1 备忘录模式概述 1.2 代码理解 2.解释器模式 2.1 解释器模式概述 3.状态模式 3.1 状态模式概述 3.2 代码理解 4.策略模式 4.1 策略模 ...

  10. 设计模式 | 备忘录模式及典型应用

    本文的主要内容: 介绍备忘录模式 示例 备忘录模式总结 备忘录模式 备忘录模式经常可以遇到,譬如下面这些场景: 浏览器回退:浏览器一般有浏览记录,当我们在一个网页上点击几次链接之后,可在左上角点击左箭 ...

最新文章

  1. 浅析搜索引擎对网站的抓取规则有哪些方面
  2. 【数据竞赛】从0梳理1场时间序列赛事!
  3. android触摸事件透传,Android中父View穿透子View响应长按事件
  4. 【face-landmarks】人脸关键点检测汇总
  5. Ubantu键盘快捷键
  6. BZOJ1734: [Usaco2005 Feb]Aggressive cows 愤怒的牛
  7. freeBSD的vi
  8. 用WAP手机远程遥控电脑1
  9. [数据恢复答疑]删除了WINDOWS桌面上的文件,该如何恢复数据
  10. 渗透测试各种扫描工具集合(好用)
  11. 如何用UE4制作2D游戏文档(四)——NPC篇
  12. 毕业设计总结篇之终结篇——基于android的创意展示平台(混合app)
  13. [豆瓣8.1]《教养的迷思》父母的教养方式能否决定孩子的人格发展? 【美】朱迪斯•哈里斯...
  14. Mstar 平台背光时序调试
  15. Windows 7 旗舰版高效办公 - 驱动安装
  16. 设置WDS桥接成功,上不了网怎么办?路由器WDS无线桥接设置正确方法
  17. STM32 PWM输出
  18. oracle 10g express linux,使用Oracle10g express 版本方案介绍
  19. python国内下载地址_python下载链接
  20. poco,c++库学习,日期和时间

热门文章

  1. 用vulkan写个引擎 (二)vk组件
  2. C#/VB.NET 自定义PPT动画路径
  3. 保利清能西海岸收房步骤和费用明细
  4. Foobar 是什么意思?
  5. 警惕安全档案的陷阱 | 确认偏见
  6. 用户的裂变式增长,神秘的病毒系数K是什么样的?
  7. 酷睿i9-13900K性能出炉Steam游戏开发首选驰网独家i9-13900K服务器水冷定制高主频游戏服务器
  8. 用启动盘点击修复计算机没有反应,电脑系统教程:u盘插电脑没反应
  9. 录音文件下载_录音转文字别烦恼,收下这份锦囊,几种方法任你选!
  10. 软路由工具(ROS, m0n0wall),教程大收集