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

概述:                                                                                                         

备忘录模式(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 @ 2011-08-29 11:40  叶鹏  阅读(928)  评论(0编辑  收藏  举报