Net设计模式实例之备忘录模式(Memento Pattern)(1)

一、备忘录模式简介(Brief Introduction

备忘录模式( Memento Pattern ),在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以就该对象恢复到原先保存的状态。

二、解决的问题(What To Solve

       当系统功能比较复杂,而且需要记录历史属性以便当需要时做恢复动作。 Originator 可以根据保存的 Memento 信息还原到前一状态。    

三、备忘录模式分析(Analysis

1、备忘录模式结构

Originator :发起人。
CreateMemento 方法,负责创建一个备忘录,用于记录当前时刻它的内部状态。
SetMemento 方法,使用备忘录回复状态。
Show 方法,展示状态。
Originator 类:可以决定备忘录 Memento 存储 Originator 的哪些状态。
Memento 类: 备忘录,负责存储 Originator 的内部状态,并可防止 Originator 以外的其他对象访问备忘录 Memento
Caretaker 类: 负责保存备忘录 Memento ,不能对备忘录的内容进行操纵和检查。

2、备忘录模式代码

1 、发起人类 Originator
public class Originator
{
    private string _state;
 
    public string State
    {
        get { return _state; }
        set { _state = value ; }
    }
    /// <summary>
    /// 创建备忘录,将当前要保存的信息导入并实例化备忘录
    /// </summary>
    public Memento CreateMemento()
    {
        return (new Memento (this .State));
    }
 
    /// <summary>
    /// 恢复备忘录,将 Memento 导入并将相关数据恢复
    /// </summary>
    /// <param name="memento"></param>
    public void SetMemento(Memento memento)
    {
        this .State = memento.State;
    }
 
    /// <summary>
    /// 展示状态数据
    /// </summary>
    public void Show()
    {
        Console .WriteLine(" 当前状态是 :" +this .State);
    }
}
 
2 、备忘录类 Memento
public class Memento
{
    private string _state;
 
    public string State
    {
        get { return _state; }
        set { _state = value ; }
    }
 
    public Memento(string state)
    {
        this .State = state;
    }
}
 
3 、管理者类 Caretaker
public class Caretaker
{
    private Memento _memento;
 
    public Memento Memento
    {
        get { return _memento; }
        set { _memento = value ; }
    }
}
 
 
4 、客户端代码
static void Main (string [] args)
{
    Originator o = new Originator ();
    // 初始状态为 On
    o.State = "On" ;
    o.Show();
 
    // 创建备忘录并保存状态
    Caretaker caretaker = new Caretaker ();
    caretaker.Memento=o.CreateMemento();
 
    // 更改 Originator 状态 =Off
    o.State = "Off" ;
    o.Show();
 
    // 恢复到原始状态
    o.SetMemento(caretaker.Memento);
    o.Show();
 
    Console .ReadKey();
}
 

3、备忘录模式运行结果

你可能感兴趣的:(备忘录模式,C#设计模式,Net设计模式,Memento_Pattern,备忘录模式实例)