• 设计模式之备忘录模式


    名词解释:

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

    使用场景:

    你在玩游戏,突然有事,此时如果关闭电脑,进度肯定木有了,然后你就点击保存,关闭电脑出去了;完事之后,你又点击加载进度,又开始玩了,这个就是一个标准的备忘录模式场景。

    必需元素:

    发起人:负责创建一个备忘录,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态 。发起人可根据需要决定备忘录存储发起人的哪些内部状态。

    备忘录:负责存储发起人对象的内部状态,并可防止发起人以外的其他对象访问备忘录。备忘录有两个接口,管理者只能看到备忘录的窄接口,它只能将备忘录传递给其他对象。发起人能够看到一个宽接口,允许它访问到先前状态所需的所有数据。

    管理者:负责保存好备忘录,不能对备忘录的内容进行操作或检查(其实就是来管理备忘录数据的)。

    其实说白了,备忘录是一个实体类,存放所有要备忘的状态(属性);而发起人呢也有自己的状态(也可以成为属性),当然也必须有用于保存备忘录和恢复备忘录的方法;管理者中呢就是有一个备忘录的对象,当然是用于保存发起人保存的备忘录也供发起人恢复使用。

    上例子:

    发起者:

     /// <summary>
        /// 发起者
        /// </summary>
        class Originator
        {
            private string state;
            /// <summary>
            /// 要保存的属性(你可以随便添加哦)
            /// </summary>
            public string State
            {
                get { return state; }
                set { state = value; }
            }
    
            /// <summary>
            /// 创建备忘录
            /// </summary>
            /// <returns></returns>
            public Memento CreateMemento()
            {
                return new Memento(state);
            }
    
            /// <summary>
            /// 恢复备忘录
            /// </summary>
            /// <param name="memento"></param>
            public void SetMemento(Memento memento)
            {
                state = memento.State;
            }
    
            public void Show()
            {
                Console.WriteLine("State="+state);
            }
            
        }

    备忘录类:

     /// <summary>
        /// 备忘录
        /// </summary>
        class Memento
        {
            private string state;
            /// <summary>
            /// 保存的属性(通常和发起者类中的属性一一对应)
            /// </summary>
            public string State
            {
                get { return state; }
            }
            public Memento(string state)
            {
                this.state = state;
            }
        }

    管理者:

      /// <summary>
        /// 管理者类(主要是隔离了发起者和备忘录,主要就是存放了备忘录对象)
        /// </summary>
        class Caretaker
        {
            private Memento memento;
            /// <summary>
            /// 备忘录对象
            /// </summary>
            public Memento Memento
            {
                get { return memento; }
                set { memento = value; }
            }
        }

     使用:

            //定义发起者对象
                Originator o = new Originator();
                //设置需要保存的属性
                o.State = "ON";
                o.Show();
    
                //定义管理者对象
                Caretaker c = new Caretaker();
                //创建备忘录
                c.Memento = o.CreateMemento();
    
                //吸怪属性
                o.State = "OFF";
                o.Show();
    
                //恢复备忘录
                o.SetMemento(c.Memento);
                o.Show();
    
                Console.Read();

     其实,这个备忘录模式应该是蛮简单的,就是一个类存储一些要保存的信息,可以进行保存和恢复,最主要是我们通过一个管理者类将发起者和备忘录类进行了隔离。

  • 相关阅读:
    realsense d435i qt 测试
    realsense d435i 数据 测试
    realsense d435i测试
    ubuntu torch GPU yolov5
    IfcLayeredItem
    ubuntu大服务器 pytorch环境配置
    condarc内容
    realsense point cloud
    yolov5 环境配置
    pip error
  • 原文地址:https://www.cnblogs.com/ListenFly/p/3308868.html
Copyright © 2020-2023  润新知