设计模式学习笔记-备忘录模式

概述:                                                                                                         

备忘录模式(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程序里呢?纠结一下

posted @   叶鹏  阅读(930)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示