*备忘录模式(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)模式的更多相关文章

  1. C++设计模式实现--备忘录(Memento)模式

    一. 备忘录模式 定义:在不破坏封装性的前提下,捕获一个对象的内部状态.并在该对象之外保存这个状态. 这样以后就可将该对象恢复到原先保存的状态. 结构图: 使用范围: Memento 模式比較适用于功 ...

  2. 设计模式C++描述----17.备忘录(Memento)模式

    一. 备忘录模式 定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 结构图: 使用范围: Memento 模式比较适用于功能 ...

  3. 备忘录(Memento)模式

    备忘录模式又叫做快照模式或者Token模式. 备忘录对象是一个用来存储另一个对象内部状态的快照的对象.备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在将来 ...

  4. Java设计模式之从[暗黑破坏神存档点]分析备忘录(Memento)模式

    在大部分游戏中,都有一个"存档点"的概念.比如,在挑战boss前,游戏会在某个地方存档,假设玩家挑战boss失败,则会从这个存档点開始又一次游戏.因此,我们能够将这个"存 ...

  5. Memento 备忘录 快照模式

    简介 定义: 在不破坏封装的前提下,捕获一个对象的[内部状态],并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态. 角色: 发起人Originator:要被备份的成员,它提供一创 ...

  6. Java设计模式(15)备忘录模式(Memento模式)

    Memento定义:memento是一个保存另外一个对象内部状态拷贝的对象,这样以后就可以将该对象恢复到原先保存的状态. Memento模式相对也比较好理解,我们看下列代码: public class ...

  7. Memento 备忘录 快照模式 MD

    备忘录模式 简介 在不破坏封装的前提下,捕获一个对象的[内部状态],并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态. 角色: 发起人Originator:要被备份的成员,它提供 ...

  8. Memento模式(备忘录设计模式)

    Memento模式? 使用面向对象编程的方式实现撤销功能时,需要事先保存实例的相关状态信息.然后,在撤销时,还需要根据所保存的信息将实例恢复至原来的状态.这个时候你需要使用Memento设计模式.(以 ...

  9. 【行为型】Memento模式

    备忘录模式顾名思义就是一种能有备忘作用的设计模式,其目的是在对象外部保存其在某一时刻的状态信息,并且在任何需要的时候,都可以通过备忘录中保存的状态数据恢复对象在当时情形下的状态. 备忘录模式旨在对象的 ...

  10. memento模式

    参考资料 • 维基百科:https://en.wikipedia.org/wiki/Memento_pattern • 百度百科:http://baike.baidu.com/link?url=ZQZ ...

随机推荐

  1. 【转】Pro Android学习笔记(九八):BroadcastReceiver(2):接收器触发通知

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.sina.com.cn/flowingflying或作者@恺风Wei-傻瓜与非傻瓜 广播接 ...

  2. mysql字符类型

    字符类型 #官网:https://dev.mysql.com/doc/refman/5.7/en/char.html #注意:char和varchar括号内的参数指的都是字符的长度 #char类型:定 ...

  3. Angular 6 HMR 热加载配置

    什么是 HMR? ​ HMR 是hot module replacement 的简称,直译:热模块替换,如果不开启HMR模式,angular项目在模块更改的时候会从根节点开始刷新,开启HMR模式以后, ...

  4. a标签什么时候可以设置宽高

    行内元素(如a标签),在文档流中的时候因为是行内元素所以无法设置宽高:而当设置了绝对定位或者浮动,会生成块框(即变成块元素),所以就可以设置宽高了

  5. spring-cloud配置eureka客户端

    spring-cloud配置eureka客户端 eureka用来发现其他程序 需要提前配置eureka服务端,具体看 https://www.cnblogs.com/ye-hcj/p/10292944 ...

  6. 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 ...

  7. 图灵机器人,web录音实现自动化交互问答

    一.图灵机器人 介绍 图灵机器人 是以语义技术为核心驱动力的人工智能公司,致力于“让机器理解世界”,产品服务包括机器人开放平台.机器人OS和场景方案. 官方地址为: http://www.tuling ...

  8. Android 4 学习(13):Local Broadcast Manager & Intent Filter

    参考<Professional Android 4 Development> Local Broadcast Manager 简介 Local Broadcast Manager由Andr ...

  9. Zookeeper 基础、工作流、ZAP协议

    ZooKeeper 基础 在深入了解ZooKeeper的运作之前,让我们来看看ZooKeeper的基本概念.[1] 我们将在本章中讨论以下主题:1.Architecture(架构)2.Hierarch ...

  10. Init & Deinit & ARC

    [Init & Deinit] 1.switf中,init不返回值,只负责初始化成员变量.在init方法中可以初始化常量. 2.默认初始化. 3.Swift provides an autom ...