备忘录(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 ...
随机推荐
- vim中多行注释和多行删除命令
1.多行注释: 1. 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式; 2. 在行首使用上下键选择需要注释的多行; 3. 按下键盘(大写)“I”键,进入插入 ...
- MongoDB高级查询用法大全 (转)
http://www.cnblogs.com/t2xingzhe/p/3555268.html
- Maven入门----MyEclipse创建maven项目(二)
新建项目: Next next next 新建项目后,MyEclipse会自动从远程仓库中下载支持包,需要几分钟左右时间. 项目结构图: HelloWorld.java public class He ...
- mac 在终端使用命令行启动脚本,无法使用自己安装的python去执行脚本问题
参考了2片文章: //查看python位置 which python //先备份 1.sudo cp /usr/bin/python /usr/bin/python_cp //删除 2.sudo rm ...
- 微信小程序之if操作
.wxss控制样式 .price-agent{ font-size: 25rpx; color:#ababab; float: left; position: absolute; bottom: 0; ...
- JAVA基础知识——IO
首先看一下JAVA IO的类继承关系
- 字符串,字符数组(C/C++)
这个地方困惑我好久了,废话不多说 char c1[]="12345"; char *c2="12345"; string c3="12345" ...
- WEB扫描器Atscan的安装和使用
项目地址:https://github.com/AlisamTechnology/ATSCAN root@sch01ar:/sch01ar# git clone https://github.com/ ...
- Apache配置中ProxyPass与ProxyPassReverse及ProxyPassMatch的概述
apache中的mod_proxy模块主要作用就是进行url的转发,即具有代理的功能.应用此功能,可以很方便的实现同tomcat等应用服务器的整合,甚者可以很方便的实现web集群的功能. 例如使用ap ...
- keil:C语言里面调用汇编程序
C语言直观,汇编效率高,C里面嵌入汇编是很好的选择. 路径大概如图: mian.c是我的C语言程序,Func.s是汇编程序. 主要是Init_1这个函数的实现在汇编文件里面,使用汇编实现的. 首先在C ...