设计模式-行为设计模式:备忘录模式 Memento

来源:互联网 发布:爱知中学高中部怎么样 编辑:程序博客网 时间:2024/05/19 15:44

备忘录模式就是给现在的情况做一下备份,以便后期找回操作


Lol类

[Serializable]    public class Lol    {        //英雄名称        public string Name;        //等级        public string Grade;        public Lol(string name, string grade)        {            Name = name;            Grade = grade;            Console.WriteLine("英雄{0}创建完毕,进入游戏,当前等级{1}",this.Name,this.Grade);        }        public void Show()        {            Console.WriteLine("英雄{0}当前等级{1}",this.Name,this.Grade);        }           }


序列化、反序列化类

 public class SerialzeHelper    {        /// <summary>        /// 序列化        /// </summary>        /// <param name="target"></param>        /// <returns></returns>        public static string Serializable(object target)        {            using (MemoryStream stream = new MemoryStream())            {                new BinaryFormatter().Serialize(stream,target);                return Convert.ToBase64String(stream.ToArray());            }        }        /// <summary>        /// 反序列化        /// </summary>        /// <typeparam name="T"></typeparam>        /// <param name="target"></param>        /// <returns></returns>        public static T Derializable<T>(string target)        {            byte[] targetArray = Convert.FromBase64String(target);            using(MemoryStream stream = new MemoryStream(targetArray))            {                return (T)(new BinaryFormatter().Deserialize(stream));            }        }    }

备忘录类

public class Pattern    {        private Dictionary<string, Lol> DictionaryLol = new Dictionary<string, Lol>();        //存档        public void Save(string SaveName,Lol lol)        {            if (DictionaryLol.ContainsKey(SaveName))            {                //如果存在,则覆盖原纪录                DictionaryLol[SaveName] = Serial(lol);            }            else            {                 //不存在该名称记录  直接添加                DictionaryLol.Add(SaveName,Serial(lol));            }        }        //读档        public Lol Get(string SaveName)        {            if (DictionaryLol.ContainsKey(SaveName))            {                //如果存在,则覆盖原纪录                return DictionaryLol[SaveName];            }            return null;//不存在则返回空        }        //对lol进行序列化之后反序列化 返回一个新的对象        public Lol Serial(Lol lol)        {            return SerialzeHelper.Derializable<Lol>(SerialzeHelper.Serializable(lol));        }    }

操作备忘录类

public class Execute    {        private Pattern pattern = null;        public Execute()        {            pattern = new Pattern();        }        public void Save(string SaveName,Lol lol)        {            pattern.Save(SaveName,lol);        }        public Lol Get(string SaveName)        {            return pattern.Get(SaveName);        }    }

调用

Console.WriteLine("**********************开始游戏***************************");            Lol l = new Lol("卡特琳娜","1");            l.Grade = "3";//升到3级             l.Show();//展示一下            Execute e = new Execute();            e.Save("3级存档",l);            l.Grade = "5";//升到3级             l.Show();//展示一下            e.Save("5级存档", l);            Console.WriteLine("**********************读取3级存档***************************");            l=e.Get("3级存档");            l.Show();            Console.WriteLine("**********************读取5级存档***************************");            l = e.Get("5级存档");            l.Show();

结果



0 0
原创粉丝点击