备忘录(Memento)模式
*备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对戏的内部状态,
* 并在该对象之外保存这个状态。这样以后就能恢复到原来保存的状态
*Originator(发起人): 负责创建一个备忘录 Memento,用以记录当前时候他的内部状态,并可用于备忘录恢复。
*Memento(备忘录):负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录Memento。
*Caretaker(管理者):负责保存好备忘录。
基础代码如下:
Originator发起人类中需要提供 创建备忘录 跟 读取备忘录的方法。
Caretaker 还要提供一个存储的第3方类。用于暂存 备忘录。(管理者)
Originator o = new Originator();
o.State = "On";
o.Show(); Caretaker c = new Caretaker();
c.Memento = o.CreateMemento(); o.State = "Off";
o.Show(); o.SetMemento(c.Memento);
o.Show(); /// <summary>
/// 发起人
/// </summary>
public class Originator
{
public string State
{ get; set; }
public Memento CreateMemento()
{
return (new Memento(State));
}
public void SetMemento(Memento memento)
{
State = memento.State;
}
public void Show()
{
Console.WriteLine("State=" + State);
}
}
/// <summary>
/// Memento(备忘录)
/// </summary>
public class Memento
{
public string State
{ get; set; }
public Memento(string state)
{
this.State = state;
}
}
/// <summary>
/// Caretaker(管理者)
/// </summary>
public class Caretaker
{
public Memento Memento
{ get; set; }
}
实例
Console.WriteLine(" 数据初始化:");
GameWuZhunShen WuZhenShen = new GameWuZhunShen();
WuZhenShen.HP = "";
WuZhenShen.MP = "";
WuZhenShen.AP = "";
WuZhenShen.SP = "";
WuZhenShen.Show();
Console.WriteLine(" \n保存数据:(=========)");
GMCaretaker GM = new GMCaretaker();
GM.WuZhunShen = WuZhenShen.SaveState();
Console.WriteLine(" \n参战后数据:");
WuZhenShen.HP = "";
WuZhenShen.MP = "";
WuZhenShen.AP = "";
WuZhenShen.SP = "";
WuZhenShen.Show();
Console.WriteLine(" \n恢复数据:");
WuZhenShen.SetState(GM.WuZhunShen);
WuZhenShen.Show();
/// <summary>
/// 游戏角色 -- 武尊神
/// </summary>
public class GameWuZhunShen
{
//属性值
public string HP
{ get; set; }
public string MP
{ get; set; }
public string AP
{ get; set; }
public string SP
{ get; set; }
//保存数据
public WuZhunShenMemento SaveState()
{
return new WuZhunShenMemento(HP, MP, AP, SP);
}
//读取保存的数据
public void SetState(WuZhunShenMemento wuZhunShen)
{
HP = wuZhunShen.HP;
MP = wuZhunShen.MP;
AP = wuZhunShen.AP;
SP = wuZhunShen.SP;
}
public void Show()
{
Console.Write(" 武尊神:\n");
Console.Write(" HP:'{0}'\n", HP);
Console.Write(" MP:'{0}'\n", MP);
Console.Write(" AP:'{0}'\n", AP);
Console.Write(" SP:'{0}'\n", SP);
}
}
/// <summary>
/// 游戏角色备忘录
/// </summary>
public class WuZhunShenMemento
{
//属性值
public string HP
{ get; set; }
public string MP
{ get; set; }
public string AP
{ get; set; }
public string SP
{ get; set; }
public WuZhunShenMemento(string _HP, string _MP, string _AP, string _SP)
{
HP = _HP;
MP = _MP;
AP = _AP;
SP = _SP;
}
}
/// <summary>
/// 系统管理者
/// </summary>
public class GMCaretaker
{
public WuZhunShenMemento WuZhunShen
{ get; set; }
}
备忘录(Memento)模式的更多相关文章
- C++设计模式实现--备忘录(Memento)模式
一. 备忘录模式 定义:在不破坏封装性的前提下,捕获一个对象的内部状态.并在该对象之外保存这个状态. 这样以后就可将该对象恢复到原先保存的状态. 结构图: 使用范围: Memento 模式比較适用于功 ...
- 设计模式C++描述----17.备忘录(Memento)模式
一. 备忘录模式 定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 结构图: 使用范围: Memento 模式比较适用于功能 ...
- 备忘录(Memento)模式
备忘录模式又叫做快照模式或者Token模式. 备忘录对象是一个用来存储另一个对象内部状态的快照的对象.备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在将来 ...
- Java设计模式之从[暗黑破坏神存档点]分析备忘录(Memento)模式
在大部分游戏中,都有一个"存档点"的概念.比如,在挑战boss前,游戏会在某个地方存档,假设玩家挑战boss失败,则会从这个存档点開始又一次游戏.因此,我们能够将这个"存 ...
- Memento 备忘录 快照模式
简介 定义: 在不破坏封装的前提下,捕获一个对象的[内部状态],并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态. 角色: 发起人Originator:要被备份的成员,它提供一创 ...
- Java设计模式(15)备忘录模式(Memento模式)
Memento定义:memento是一个保存另外一个对象内部状态拷贝的对象,这样以后就可以将该对象恢复到原先保存的状态. Memento模式相对也比较好理解,我们看下列代码: public class ...
- Memento 备忘录 快照模式 MD
备忘录模式 简介 在不破坏封装的前提下,捕获一个对象的[内部状态],并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态. 角色: 发起人Originator:要被备份的成员,它提供 ...
- Memento模式(备忘录设计模式)
Memento模式? 使用面向对象编程的方式实现撤销功能时,需要事先保存实例的相关状态信息.然后,在撤销时,还需要根据所保存的信息将实例恢复至原来的状态.这个时候你需要使用Memento设计模式.(以 ...
- 【行为型】Memento模式
备忘录模式顾名思义就是一种能有备忘作用的设计模式,其目的是在对象外部保存其在某一时刻的状态信息,并且在任何需要的时候,都可以通过备忘录中保存的状态数据恢复对象在当时情形下的状态. 备忘录模式旨在对象的 ...
- memento模式
参考资料 • 维基百科:https://en.wikipedia.org/wiki/Memento_pattern • 百度百科:http://baike.baidu.com/link?url=ZQZ ...
随机推荐
- 【转】Pro Android学习笔记(九八):BroadcastReceiver(2):接收器触发通知
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.sina.com.cn/flowingflying或作者@恺风Wei-傻瓜与非傻瓜 广播接 ...
- mysql字符类型
字符类型 #官网:https://dev.mysql.com/doc/refman/5.7/en/char.html #注意:char和varchar括号内的参数指的都是字符的长度 #char类型:定 ...
- Angular 6 HMR 热加载配置
什么是 HMR? HMR 是hot module replacement 的简称,直译:热模块替换,如果不开启HMR模式,angular项目在模块更改的时候会从根节点开始刷新,开启HMR模式以后, ...
- a标签什么时候可以设置宽高
行内元素(如a标签),在文档流中的时候因为是行内元素所以无法设置宽高:而当设置了绝对定位或者浮动,会生成块框(即变成块元素),所以就可以设置宽高了
- spring-cloud配置eureka客户端
spring-cloud配置eureka客户端 eureka用来发现其他程序 需要提前配置eureka服务端,具体看 https://www.cnblogs.com/ye-hcj/p/10292944 ...
- Python技巧(一)
一 if..else的多种写法 a, b, c = 1, 2, 3 1.常规 if a > b: c = a else: c = b 2.表达式 c = a if a > b else ...
- 图灵机器人,web录音实现自动化交互问答
一.图灵机器人 介绍 图灵机器人 是以语义技术为核心驱动力的人工智能公司,致力于“让机器理解世界”,产品服务包括机器人开放平台.机器人OS和场景方案. 官方地址为: http://www.tuling ...
- Android 4 学习(13):Local Broadcast Manager & Intent Filter
参考<Professional Android 4 Development> Local Broadcast Manager 简介 Local Broadcast Manager由Andr ...
- Zookeeper 基础、工作流、ZAP协议
ZooKeeper 基础 在深入了解ZooKeeper的运作之前,让我们来看看ZooKeeper的基本概念.[1] 我们将在本章中讨论以下主题:1.Architecture(架构)2.Hierarch ...
- Init & Deinit & ARC
[Init & Deinit] 1.switf中,init不返回值,只负责初始化成员变量.在init方法中可以初始化常量. 2.默认初始化. 3.Swift provides an autom ...