备忘录(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 ...
随机推荐
- 从jvm角度来解析java语法糖
java有很多语法糖,比如自动拆箱,自动装箱,foreach等等,这些原理相信每一个入门教程里都有讲,但是我相信不是每一个人 都通过查看这些语法糖的字节码来确认这些原理,因为我也是现在才想看一下. 1 ...
- swift 学习-- 元组
//元组 //定义:元组是有多个值组合而成的复合值,其中的值可以是任意类型,而且每一个元素的类型可以是不同的 let http404Error = (404, "Not Found" ...
- biosdevname网卡命名方式
在前天通过了最后的 Go/No-Go 会议后,Fedora 15 已定于下周正式发布,这个永远站在开源技术最前沿的发行版,即将迎来又一个新的大的变动.作为 Fedora 用户,相信你已经习惯了每个新版 ...
- spring mvc 返回字符串带双引号及StringHttpMessageConverter乱码处理
本文转载自:http://blog.csdn.net/wangyangbto/article/details/48804155 很多人都碰到过,SpringMVC使用 @ResponseBody 注解 ...
- RecyclerView(滚动控件)的用法
1.首先在build.gradle中添加依赖库 compile 'com.android.support:recyclerview-v7:24.2.1' 2.修改activity_main.xml & ...
- java代码switch语句求分数等级
总结:从键盘输入分数----- 如果在0到100内,则输出等级 小于0或者是大于100都不能输出,这里用if-else条件判断. package com.c2; import java.util.Sc ...
- Ubantu下安装adobe flash player插件
用火狐看视频,要打开Adobe官网下载xxxx,太麻烦. 可以在Terminal下输入: apt-get install flashplugin-nonfree 好了.
- JAVA爬取亚马逊的商品信息
在程序里面输入你想爬取的商品名字,就可以返回这件商品在亚马逊搜索中都所有相关商品的信息,包括名字和价格. 解决了在爬取亚马逊时候,亚马逊可以识别出你的爬虫,并返回503,造成只能爬取几个页面的问题. ...
- 在.jsp中非表单请求action的几种方式总结
转自:https://www.jb51.net/article/35621.htm 1 一: 复制代码 代码如下: <a href="userAction.do?flag=user_r ...
- IOS证书申请 PPF provisioning profile Developer Certificate
[Error] No provisioning profile found for the selected build configuration 新来一个iPhone,真机调试的时候报错. 1.x ...