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程序里呢?纠结一下

  • 相关阅读:
    【Matlab】把一年中的某一天(从1月1日起)换算成日期
    【工具】用hexo搭建博客
    【工具】文献分析工具histcite的简单使用
    【工具】用PPT排版打印海报时图片分辨率问题
    【工具】PPT插入高清图片保存后图片变模糊的解决方法
    【工具】排版软件TeX Live 2016的简单使用
    【工具】文字识别软件(OCR) ABBYY Finereader 11简单使用
    【Matlab】编程风格摘录
    【信号】用matlab实现一维信号的高斯滤波
    【GMT5】用GMT绘制测高卫星Topex_Poseidon_Jason的地面轨迹
  • 原文地址:https://www.cnblogs.com/jqbird/p/2158018.html
Copyright © 2011-2022 走看看