行为型设计模式——备忘录模式

在不破坏封装性的前提下捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态。

适用于

①必须保存一个对象在某一时刻的(部分)状态,这样以后需要时它才能恢复到先前的状态。

②如果一个用接口来让其他对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。

类图如下

 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     }
View Code
1     /// <summary>
2     /// 抽象备忘录,什么也不干,用于给管理者管理
3     /// </summary>
4     public interface IMemento
5     {
6     }
View Code
1     /// <summary>
2     /// 备忘录管理者角色,用来管理备忘录
3     /// </summary>
4     internal class CareTaker
5     {
6         public IMemento Memento { set; get; }
7     }
View Code
posted @ 2025-05-02 23:55  是铭不是明  阅读(10)  评论(0)    收藏  举报