在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
// 备忘录类:存储状态
public class Memento
{
public string State { get; }
public Memento(string state) => State = state;
}
// 原发器类:创建和恢复备忘录
public class Originator
{
public string State { get; set; }
public Memento CreateMemento() => new Memento(State);
public void RestoreMemento(Memento memento) => State = memento.State;
}
// 管理者类:管理备忘录
public class Caretaker
{
public Memento Memento { get; set; }
}
// 调用示例
public static void TestMemento()
{
var originator = new Originator { State = "状态1" };
var caretaker = new Caretaker { Memento = originator.CreateMemento() };
originator.State = "状态2";
Console.WriteLine("当前状态: " + originator.State); // 状态2
originator.RestoreMemento(caretaker.Memento);
Console.WriteLine("恢复后状态: " + originator.State); // 状态1
}