在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
备忘录模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时。
//定义一个发起人类
class Originator
{
//状态
string state;
public string State { get { return state; } set { state = value; } }
//创建备忘录
public Memento CreateMemento()
{
return (new Memento(state));
}
//设置备忘录状态
public void SetMemento(Memento memento)
{
state = memento.State;
}
public void Show()
{
Console.WriteLine("State=" + state);
}
}
//备忘录类
class Memento
{
string state;
//构造方法,将相关数据导入。
public Memento(string state)
{
this.state = state;
}
//需要保持的数据属性,可以是多个
public string State
{
get { return state; }
}
}
//管理者类
class Caretaker
{
//备忘录
Memento memento;
//得到或设置备忘录
public Memento Memento
{
get { return memento; }
set { memento = value; }
}
}
调用:
//发起人 初始状态,状态属性为“on”。
Originator o = new Originator();
o.State = "On";
o.Show();
//管理者
Caretaker c = new Caretaker();
c.Memento = o.CreateMemento();//保存状态时,由于有了很好的封装,可以隐藏Originator的实现细节。
o.State = "off";
o.Show();
o.SetMemento(c.Memento);
o.Show();