首页 > 代码库 > 备忘录(Memento)模式
备忘录(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 = "75120"; WuZhenShen.MP = "175120"; WuZhenShen.AP = "15120"; WuZhenShen.SP = "3120"; WuZhenShen.Show(); Console.WriteLine(" \n保存数据:(=========)"); GMCaretaker GM = new GMCaretaker(); GM.WuZhunShen = WuZhenShen.SaveState(); Console.WriteLine(" \n参战后数据:"); WuZhenShen.HP = "5120"; WuZhenShen.MP = "5720"; WuZhenShen.AP = "15120"; WuZhenShen.SP = "3120"; 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; } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。