设计模式学习笔记-备忘录模式
概述:
备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。
应用场合:
1.必须保存一个对象在某一时刻(部分)的状态,这样以后需要时它才能恢复到先前的状态。
2.如果用一个接口来让其他对象直接得到这个状态,将会暴露对象的实现细节并破坏对象的封装性。
类图:
代码结构实例:
1.创建一个备忘录类
/// <summary>
/// 备忘录类
/// </summary>
class Memento
{
private string _state;
public Memento(string state)
{
this._state = state;
}
public string State
{
get { return _state; }
}
}
2.发起人类
/// <summary>
/// 发起人类
/// </summary>
class Originator
{
/// <summary>
/// 需要保存的属性
/// </summary>
private string state;
public string State
{
get { return state; }
set { state = value; }
}
/// <summary>
/// 创建备忘录,将当前需要保存的信息导入并实例化一个Memento对象
/// </summary>
/// <returns></returns>
public Memento CreateMemento()
{
return (new Memento((state)));
}
/// <summary>
/// 恢复备忘录模式,将Memento导入并将相关数据恢复
/// </summary>
/// <param name="memento"></param>
public void SetMemento(Memento memento)
{
state = memento.State;
}
/// <summary>
/// 显示状态
/// </summary>
public void Show()
{
Console.WriteLine("State="+state);
}
}
3.管理者类
/// <summary>
/// 管理者类
/// </summary>
class Caretaker
{
/// <summary>
/// 得到备忘录
/// </summary>
private Memento memento;
public Memento Memento
{
get { return memento; }
set { memento = value; }
}
}
4.客户端调用
/// <summary>
/// 测试备忘录模式
/// </summary>
static void TestMemento()
{
Originator o = new Originator();
o.State = "On"; //初始状态
o.Show();
Caretaker c = new Caretaker();
c.Memento = o.CreateMemento();//保存状态
o.State = "Off";//状态改变为Off
o.Show();
o.SetMemento(c.Memento);//恢复原始状态
o.Show();
Console.Read();
}
小结:
备忘录模式好像大部分在游戏程序设计里使用,来保存游戏状态,怎么把用到web程序里呢?纠结一下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架