-
设计模式(21):备忘录模式(Memento)
-
-
备忘录模式(Memento)
-
- 定义
- 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
-
备忘录模式(Memento)结构图
- 发起人(Originator)类
-
class Originator
{
private 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);
}
} - 备忘录(Memento)类
-
class Memento
{
private string state;
public Memento(string state)
{
this.state = state;
}
public string State
{
get { return state; }
}
} - 管理者(Caretaker)类
-
class Caretaker
{
private Memento memento
{
get { return memento; }
set { memento = value; }
}
} - 客户端程序
-
static void Main(string[] args)
{
Originator o = new Originator();
o.State = "On";
o.show();Caretaker c
= new Caretaker();
c.memento = o.CreateMemento();
o.State = "Off";
o.show();
o.SetMemento(c.memento);
o.show();
} - 备忘录的好处:
- 把要保存的细节给封装在了Memento中,哪一天要改保存的细节也不用影响客户端了.
- Mememto模式比较适用于功较复杂,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Originator可以根据保存的Memento信息还原到前一状态。
- 如果在某个系统中使用命令模式时,需要实现命令的撤销功能,那么命令模式可以使用备忘录模式来存储可撤销操作的状态。
- 当角色的状态改变时候,有可能这个状态无效,这时候就可以使用暂时存储器起来的备忘录将状态恢复。