Memento_备忘录模式
1.概念
备忘录
(Memento)模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样在这个对象发生改变后,就可以使用
备忘录
将该对象恢复到原先保存的状态。
2.UML类图
3.代码分析
①
发起者类
Originator
,产生一个状态。
class Originator
{
//状态
private string state;
public string State
{
get { return state; }
set { state = value; }
}
/// <summary>
/// 创建备忘录
/// </summary>
/// <returns></returns>
public Memento CreateMemento()
{
return (new Memento(state));
}
/// <summary>
/// 恢复状态
/// </summary>
/// <param name="memento"></param>
public void SetMemento(Memento memento)
{
state = memento.State;
}
/// <summary>
/// 展示状态
/// </summary>
public void Show()
{
Console.WriteLine("状态State为:" + state);
}
}
②
备忘录类
Memento
,存储一个状态。
class Memento
{
//状态
private string state;
public string State
{
get { return state; }
}
/// <summary>
/// 保存状态
/// </summary>
/// <param name="state"></param>
public Memento(string state)
{
this.state = state;
}
}
③
管理者类
Caretaker
,使用备忘录对象保存当前状态。
class Caretaker
{
/// <summary>
/// 备忘录对象
/// </summary>
private Memento memento;
public Memento Memento
{
get { return memento; }
set { memento = value; }
}
}
④ Main函数
,最初状态 => 保存状态 => 改变状态 => 恢复最初状态。
static void Main(string[] args)
{
//设置初始状态
Originator origin = new Originator();
origin.State = "OK";
origin.Show();
//管理者保存备忘录
Caretaker caretaker = new Caretaker();
caretaker.Memento = origin.CreateMemento();
Console.WriteLine("\n====改变状态====\n");
//改变状态
origin.State = "NG";
origin.Show();
Console.WriteLine("\n====恢复状态====\n");
//恢复状态
origin.SetMemento(caretaker.Memento);
origin.Show();
Console.ReadKey();
}
⑤ 结果
版权声明:本文为weixin_49738070原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。