定义列表
代码块
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 备忘录模式
{
class Caretaker // 负责保存好备忘录
{
public Memento memento { get;set;}
}
// 负责存储Originator对象的内部状态,并可防止Originator以外的其他对象,访问备忘录
class Memento
{
// 保存发起人Originator的状态
public List<Game> GameMementoBack;
public Memento(List<Game> gameplayers)
{
GameMementoBack = gameplayers;
}
}
// 游戏进度
class Game
{
private string gameLevel; // 游戏等级
public string GameLevel
{
get { return gameLevel; }
set { gameLevel = value; }
}
private int gameScore; // 游戏分数
public int GameScore
{
get { return gameScore; }
set { gameScore = value; }
}
private string userName; // 用户名
public string UserName
{
get { return userName; }
set { userName = value; }
}
}
// 负责创建一个备忘录Memento,用于记录当前时刻的内部状态,并可以使用备忘录恢复内部状态
class Originator
{
public Originator(List<Game> gameplayers)
{
Gameplayers=gameplayers;
}
// 发起人需要保存内部状态
public List<Game> Gameplayers{get;set;}
// 创建备忘录
public Memento CreatMemento()
{
return new Memento(new List<Game>(this.Gameplayers));
}
// 将备忘录中的数据备份导入到游戏中去
public void RestoreMemento(Memento memento)
{
this.Gameplayers = memento.GameMementoBack;
}
public void Show()
{
Console.WriteLine("游戏中有{0}个玩家",Gameplayers);
foreach (Game per in Gameplayers) // 遍历每个玩家 记录姓名,级别,分数等
{
Console.WriteLine("名字:{0} 级别:{1} 分数:{2}",per.UserName,per.GameLevel,per.GameScore);
}
}
}
}
调用:
class Program
{
static void Main(string[] args)
{
List GamePlayers = new List()
{
new Game() { UserName=”Roye”,GameLevel=”30”,GameScore=5000},
new Game() { UserName = “Jimmy”, GameLevel = “36”, GameScore = 8000 },
new Game() { UserName = “Joy”, GameLevel = “46”, GameScore = 20000 }
};
Originator originator = new Originator(GamePlayers);
originator.Show();
// Console.Read();
Console.WriteLine(“\r\n”);
// 创建备忘录并保存对象
Caretaker caretaker = new Caretaker();
caretaker.memento = originator.CreatMemento();
// 更改originator列表
Console.WriteLine(“—移除最后一个玩家—”);
originator.Gameplayers.RemoveAt(2);
originator.Show();
Console.WriteLine(“\r\n”);
// 恢复到原始状态
Console.WriteLine(“—恢复玩家列表—”);
originator.RestoreMemento(caretaker.memento);
originator.Show();
Console.ReadKey();
}
}
总结:作者是小菜鸟一枚,如果有不对的地方,欢迎指正,希望共同学习,共同进步!