行为型设计模式——备忘录模式
在不破坏封装性的前提下捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态。
适用于
①必须保存一个对象在某一时刻的(部分)状态,这样以后需要时它才能恢复到先前的状态。
②如果一个用接口来让其他对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。
类图如下

1 internal class Program 2 { 3 static void Main(string[] args) 4 { 5 Originator originator = new Originator(); 6 originator.State = "On";//给备忘录保存的状态 7 Console.WriteLine("最开始状态" + originator.State); 8 9 CareTaker careTaker = new CareTaker(); 10 careTaker.Memento = originator.GetMemento();//保存状态 11 12 //修改状态 13 originator.State = "Off"; 14 Console.WriteLine("修改后状态" + originator.State); 15 16 //恢复状态 17 originator.RecoverState(careTaker.Memento); 18 Console.WriteLine("恢复后状态" + originator.State); 19 20 } 21 }
1 /// <summary> 2 /// 发起人角色,用于创建备忘录,并保存当前状态 3 /// </summary> 4 public class Originator 5 { 6 //状态 7 public string State { get; set; } 8 9 //保存角色状态 10 public IMemento GetMemento() 11 { 12 return new Memento(State); 13 } 14 15 //回复角色状态 16 public void RecoverState(IMemento memento) 17 { 18 Memento memento1 = (Memento)memento; 19 State = memento1.State; 20 } 21 22 /// <summary> 23 /// 具体备忘录,属于发起者的私有类,不能被别人访问与操作 24 /// </summary> 25 private class Memento : IMemento 26 { 27 //状态 28 public string State; 29 public Memento() { } 30 public Memento(string state) 31 { 32 this.State = state; 33 } 34 } 35 }
1 /// <summary> 2 /// 抽象备忘录,什么也不干,用于给管理者管理 3 /// </summary> 4 public interface IMemento 5 { 6 }
1 /// <summary> 2 /// 备忘录管理者角色,用来管理备忘录 3 /// </summary> 4 internal class CareTaker 5 { 6 public IMemento Memento { set; get; } 7 }

浙公网安备 33010602011771号