设计模式(十九):备忘录模式
一、定义
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态
二、实例
2.1 发起人:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。
public class Originator { private string state = string.Empty; public string GetState() { return state; } public void SetState(string _state) { state = _state; } public Memento CreatMemento() { return new Memento(state); } public void RestoreMemento(Memento _memento) { SetState(_memento.GetState()); } }
2.2 备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。
public class Memento { private string state = string.Empty; public Memento(string _state) { state = _state; } public string GetState() { return state; } public void SetState(string _state) { state = _state; } }
2.3 管理角色:对备忘录进行管理,保存和提供备忘录。
public class Caretaker { private Memento memento; public void SetMemento(Memento _memento) { memento = _memento; } public Memento GetMemento() { return memento; } }
2.4 客户端:
//-------------------------备忘录模式--------------------- Memento.Originator originator = new Memento.Originator(); originator.SetState("初始状态—1"); Console.WriteLine("初始状态:{0}", originator.GetState()); //备忘状态 Memento.Caretaker caretaker = new Memento.Caretaker(); caretaker.SetMemento(originator.CreatMemento()); //修改状态 originator.SetState("状态—2"); Console.WriteLine("修改状态:{0}", originator.GetState()); //恢复状态 originator.RestoreMemento(caretaker.GetMemento()); Console.WriteLine("恢复后状态:{0}", originator.GetState()); Console.ReadKey();
结果:
三、总结
优:
- 当发起人角色中的状态改变时,有可能这是个错误的改变,我们使用备忘录模式就可以把这个错误的改变还原。
- 备份的状态是保存在发起人角色之外的,这样,发起人角色就不需要对各个备份的状态进行管理。
缺:
- 在实际应用中,备忘录模式都是多状态和多备份的,发起人角色的状态需要存储到备忘录对象中,对资源的消耗是比较严重的。
更多精彩原创心得,请关注微信公众号: 梯形

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?