50 this.fileBack = docs;
51 }
52 }
53
54 /// <summary>
55 /// 发起人
56 /// </summary>
57 public class Originator
58 {
59 //内部状态
60 public List<Document> docs;
61
62 public Originator(List<Document> docs)
63 {
64 this.docs = docs;
65 }
66
67 public Memento CreateMemento()
68 {
69 // 深拷贝传递对象
70 var str = JsonConvert.SerializeObject(this.docs);
71 return new Memento(JsonConvert.DeserializeObject<List<Document>>(str));
72 }
73
74 public void SetMemento(Memento memento)
75 {
76 Console.WriteLine("Restoring state...");
77 docs = memento.fileBack;
78 }
79
80 /// <summary>
81 /// 显示信息
82 /// </summary>
83 public void GetShow()
84 {
85 foreach (var doc in docs)
86 {
87 Console.WriteLine($"文件名:{doc.Name},内容:{doc.Content}");
88 }
89 }
90 }
91
92 /// <summary>
93 /// 管理者
94 /// </summary>
95 public class Caretaker
96 {
97 // 使用多个备忘录来存储多个备份点
98 public Dictionary<DateTimeOffset, Memento> MementoDic { get; set; }
99
100 public Caretaker()
101 {
102 MementoDic = new Dictionary<DateTimeOffset, Memento>();
103 }
104 }
备忘录模式的优缺点:
优点:
1)给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。
2)实现了信息的封装,使得用户不需要关心状态的保存细节。
缺点:消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。
备忘录模式的应用场景:
1)需要保存/恢复数据的相关状态场景。
2)提供一个可回滚的操作。
参考:https://blog.csdn.net/heyangyi_19940703/article/details/51376570
|