本文共 2982 字,大约阅读时间需要 9 分钟。
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复至保存时的状态。
2、 模型
角色:
Originator(发起者)——创建备忘录Memorandum,并且根据需要决定,需要保存那些状态。
Memorandum(备忘录)——负责存储Originator对象的内部状态,并防止Originator以外的对象访问这个备忘录。
Caretaker(管理者)——负责保存备忘录。
程序模型:
//发起者,需要保存状态的对象
public class Originator { private string stateString1; public string StateString1 { get { return stateString1; } set { stateString1 = value; } } private string stateString2; public string StateString2 { get { return stateString2; } set { stateString2 = value; } } public Memorandum CreateMemorandum() { return new Memorandum(stateString1, stateString2); } public void SetMemorandum(Memorandum memorandum) { StateString1 = memorandum.StateString1; StateString2 = memorandum.StateString2; } public void ShowMemorandum() { Console.WriteLine("当前状态:"); Console.WriteLine("StateString1={0}", stateString1, stateString2); Console.WriteLine("StateString2={0}", stateString1, stateString2); } }
// 存储Originator,其中包括的参数和要存的Originator参数一致
public class Memorandum { private string stateString1; private string stateString2; public Memorandum(string state1, string state2) { this.stateString1 = state1; this.stateString2 = state2; } public string StateString1 { get { return stateString1; } } public string StateString2 { get { return stateString2; } } }
管理者:
public class CareTaker { private Memorandum memorandum; public Memorandum MemorandumClass { get { return memorandum; } set { memorandum = value; } } }
调用:
static void Main(string[] args) { //发起者参数状态初始化 Originator originator = new Originator(); originator.StateString1 = "参数StateString1——初始化1"; originator.StateString2 = "参数StateString2——初始化1"; originator.ShowMemorandum(); //保存一份备份 CareTaker careTaker = new CareTaker(); careTaker.MemorandumClass = originator.CreateMemorandum(); //发起者参数状态改变了 originator.StateString1 = "参数StateString1——初始化2"; originator.StateString2 = "参数StateString2——初始化2"; originator.ShowMemorandum(); //读取保存的进度 originator.SetMemorandum(careTaker.MemorandumClass); originator.ShowMemorandum(); Console.ReadKey(); }
结果:
备忘录模式,实际就是将一个类的当前状态保存一份放着,当状态改变以后,后面需要的时候再去读取保存的状态。而怎么去保存呢,Memorandum承担了保存参数的状态。如果一个类没有行为,而只有属性的话,那么Memorandum就可以写成和发起者一样的类型,保存的时候就可以保存发起者的实例。
转载地址:http://wtivl.baihongyu.com/