備忘錄模式就是給現在的情況做一下備份,以便後期找回操作
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();
結果