zoukankan      html  css  js  c++  java
  • 设计模式学习笔记备忘录模式

    概述:                                                                                                         

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

  • 相关阅读:
    迭代和列表生成式
    python递归函数
    python函数
    变量
    python第八课后整理
    python第八课
    python第七课
    python第六课
    python第五课
    微信端/企业微信端H5页面调试方法
  • 原文地址:https://www.cnblogs.com/jqbird/p/2158018.html
Copyright © 2011-2022 走看看