前言:
备忘录模式用于软件系统中实现撤销功能,如下:
1、原发器类
该类用于软件系统中存储系统状态的,该类中通过创建一个备忘录对象来存储当前状态,以及使用负责人类中存储的备忘录对象来获取原发器的历史状态
public class Origin//原发器
{
private string _State;//不让别的类获取到这个状态
/// <summary>
/// 把当前状态存到备忘录类中,并获取到备忘录对象,获取到这个对象后需要存入负责人类中
/// </summary>
/// <returns></returns>
internal BackUp CreateBackUp()
{
BackUp backUp = new BackUp(this);
return backUp;
}
/// <summary>
/// 通过负责人类中存储的备忘录对象来获取存储的源发器中的历史状态
/// </summary>
/// <param name="backUp"></param>
internal void ResoreBackUp(BackUp backUp)
{
this._State = backUp.GetState();
}
/// <summary>
/// 获取源发器当前状态
/// </summary>
/// <returns></returns>
public string GetState()
{
return this._State;
}
/// <summary>
/// 改变源发器的状态
/// </summary>
/// <param name="state"></param>
public void SetState(string state)
{
this._State = state;
}
}
2、备忘录类
备忘录类就是用来存储原发器类中的历史状态的
internal class BackUp//备忘录
{
private string State { get; set; }//用于存储源发器的历史状态
internal BackUp(Origin origin)
{
this.State = origin.GetState();
}
internal string GetState()//从备忘录中获取源码器的历史状态,用于源码器恢复其状态
{
return this.State;
}
}
3、负责人类
负责保存备忘录对象
public class User//负责人
{
private BackUp _BackUp;
internal void SetBackUp(BackUp backUp)//用于将源码器中创建的备忘录对象传入
{
this._BackUp = backUp;
}
internal BackUp GetBackUp()//用于将保存的备忘录对象提取出来放到源码器中,以让源发器恢复状态
{
return _BackUp;
}
}
调用:
Origin origin = new Origin();
origin.SetState("状态1");
Console.WriteLine(origin.GetState());
User user = new User();
user.SetBackUp(origin .CreateBackUp ());//负责人类存储备忘录对象
origin.SetState("状态2");//原发器改变状态
Console.WriteLine(origin.GetState());
BackUp backUp = user.GetBackUp();//负责人类获取备忘录对象
origin.ResoreBackUp(backUp);//原发器传入历史备忘录,从而恢复原发器的状态
Console.WriteLine(origin.GetState());
输出:
状态1
状态2
状态1