备忘录模式就是给现在的情况做一下备份,以便后期找回操作
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();
结果