zoukankan      html  css  js  c++  java
  • 大话设计模式-备忘录模式

    备忘录模式

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

    备忘录模式的特点

    备忘录模式比较适用于比较复杂但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,发起人可以根据保存的备忘录信息还原到前一状态。

    使用备忘录可以把复杂的对象内部信息对其他的对象屏蔽起来,恰当地保持封装的边界。

    当角色的状态改变时,有可能这个状态无效,这个时候就可以使用暂时存储起来的备忘录将状态复原。 


    备忘录模式结构演示

    发起人

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

    class Originator{
        public string State { get; set; }
        public Memento CreateMemento() => new Memento(State);
        public void SetMemento(Memento memento) => State = memento.State;
        public void Show() => Console.WriteLine($"当前状态时:{State}");
    }

    备忘录

    负责存储发起人类的对象的内部信息,并可防止发起人以外的其他对象访问备忘录。

    其有两个接口,发起人能看到一个宽接口们可以允许发起人访问返回先前状态所需的所有数据,管理者能看到一个窄接口,只能将备忘录传递给其他对象。

    class Memento{
        public string State { get; private set; }
        public Memento(string state) => State = state;
    }

    管理者

    负责保存好备忘录,不能对备忘录的内容进行操作或者检查。

    class Caretaker{
        public Memento Memento { get; set; }
    }

    测试

    Originator o = new Originator();
    o.State = "开启";
    o.Show();
    //管理者存储备忘录
    Caretaker c = new Caretaker();
    c.Memento = o.CreateMemento();
    //更改状态
    o.State = "关闭";
    o.Show();
    //恢复状态
    o.SetMemento(c.Memento);
    o.Show();
    当前状态时:开启
    当前状态时:关闭
    当前状态时:开启
  • 相关阅读:
    mysql 不能远程连接
    ajax 内部值 外部调用不了原因
    vm NAT方式linux上不了网 解决方法
    wordpress 在linux上配置固定url方法
    win8 报file://CBD 0xc0000034 蓝屏
    VM 打开虚拟机时报“内部错误”
    thinkphp 前后版本ajaxReturn方法的分别
    thinkphp3.2引入php 实例化类
    putty 实现不用输入用户名密码直接登陆
    jQuery 遍历
  • 原文地址:https://www.cnblogs.com/errornull/p/10070320.html
Copyright © 2011-2022 走看看