备忘录(Memento)模式 行为型模式
更新: 2023-05-24 11:11:27 字数: 0 字 时长: 0 分钟
在不破坏封装性的前提下,获取并保存一个对象的内部状态,以便以后恢复它。
c#
// 备忘录模式示例
using System;
// 备忘录类,用于存储需要备份的数据
class Memento
{
private string _state;
public Memento(string state)
{
this._state = state;
}
public string GetState()
{
return this._state;
}
}
// 原始对象类,用于创建备忘录和恢复备忘录
class Originator
{
private string _state;
public void SetState(string state)
{
Console.WriteLine("设置状态为:" + state);
this._state = state;
}
public Memento SaveStateToMemento()
{
Console.WriteLine("保存状态到备忘录");
return new Memento(this._state);
}
public void GetStateFromMemento(Memento memento)
{
Console.WriteLine("从备忘录中恢复状态");
this._state = memento.GetState();
}
}
// 备忘录管理类,用于管理备忘录
class CareTaker
{
private Memento _memento;
public void SetMemento(Memento memento)
{
Console.WriteLine("保存备忘录");
this._memento = memento;
}
public Memento GetMemento()
{
Console.WriteLine("获取备忘录");
return this._memento;
}
}
// 客户端类,用于测试备忘录模式
class Client
{
static void Main(string[] args)
{
// 创建原始对象
Originator originator = new Originator();
// 创建备忘录管理对象
CareTaker careTaker = new CareTaker();
// 设置原始对象状态并保存到备忘录
originator.SetState("状态1");
careTaker.SetMemento(originator.SaveStateToMemento());
// 设置原始对象状态并保存到备忘录
originator.SetState("状态2");
careTaker.SetMemento(originator.SaveStateToMemento());
// 从备忘录中恢复原始对象状态
originator.GetStateFromMemento(careTaker.GetMemento());
Console.ReadKey();
}
}