定义:保存一个对象的某个状态,以便在适当的时候恢复对象。
优点:
1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。
2、实现了信息的封装,使得用户不需要关心状态的保存细节。
缺点:消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。
实现:
Memento 包含了要被恢复的对象的状态。
class Memento
{
private string state;
public string State
{
get { return state; }
}
public Memento(string state)
{
this.state = state;
}
}
Originator 创建并在 Memento 对象中存储状态。
class Originator
{
private string state;
public string State
{
get { return state; }
set
{
state = value;
Console.WriteLine("State=" + state);
}
}
public Memento CreateMemento()
{
return (new Memento(state));
}
public void SetMemento(Memento memento)
{
Console.WriteLine("Restoring state...");
State = memento.State;
}
}
Caretaker 对象负责从 Memento 中恢复对象的状态。
class CareTaker
{
private Memento memento;
public Memento Memento
{
get { return memento; }
set { memento = value; }
}
}
调用:
Originator originator = new Originator();
originator.State = "On";
CareTaker careTaker = new CareTaker();
careTaker.Memento = originator.CreateMemento();
originator.State = "Off";
originator.SetMemento(careTaker.Memento);
结果:
State=On
State=Off
Restoring state...
State=On