定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态
类图:
我们在编程的时候,经常需要保存对象的中间状态,当需要的时候,可以恢复到这个状态。例如word和vs中的撤消操作
备忘录模式的结构
- 发起人:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。
- 备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。
- 管理角色:对备忘录进行管理,保存和提供备忘录。
代码:
public 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); } } public class Memento { private string state; public string State { get { return state; } } public Memento(string state) { this.state = state; } } public class Caretaker { private Memento memento; public Memento Memento { get { return memento;} set { memento = value; } } }
调用:
Originator o = new Originator(); o.State = "On"; o.Show(); Caretaker caretaker = new Caretaker(); caretaker.Memento = o.CreateMemento(); o.State = "Off"; o.Show(); o.SetMemento(caretaker.Memento); o.Show();
效果: