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

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

    备忘录模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时。

    //定义一个发起人类

    class Originator
    {

    //状态
    string state;
    public string State { get { return state; } set { state = value; } }

    //创建备忘录

    public Memento CreateMemento()
    {
    return (new Memento(state));
    }

    //设置备忘录状态

    public void SetMemento(Memento memento)
    {
    state = memento.State;
    }

    public void Show()
    {
    Console.WriteLine("State=" + state);
    }

    }

    //备忘录类
    class Memento
    {
    string state;
    //构造方法,将相关数据导入。
    public Memento(string state)
    {
    this.state = state;
    }
    //需要保持的数据属性,可以是多个
    public string State
    {
    get { return state; }
    }

    }

    //管理者类
    class Caretaker
    {
    //备忘录
    Memento memento;
    //得到或设置备忘录
    public Memento Memento
    {
    get { return memento; }
    set { memento = value; }
    }

    }

    调用:

    //发起人 初始状态,状态属性为“on”。
    Originator o = new Originator();
    o.State = "On";
    o.Show();
    //管理者
    Caretaker c = new Caretaker();
    c.Memento = o.CreateMemento();//保存状态时,由于有了很好的封装,可以隐藏Originator的实现细节。

    o.State = "off";
    o.Show();

    o.SetMemento(c.Memento);
    o.Show();

  • 相关阅读:
    归并排序
    将文件存储到数据库中(MySQL)
    JS实现日历控件选择后自动填充
    HDU 1358 Period KMP
    Adobe Flash Player已经终止一项可能不安全的操作,解决方案
    将文件从数据库(MySQL)中进行读取
    Ubuntu java开发环境配置
    硬盘结构和原理
    杭电 HDU 1242 Rescue
    mysql workbench建表时PK,NN,UQ,BIN,UN,ZF,AI
  • 原文地址:https://www.cnblogs.com/buzhidaojiaoshenme/p/6728462.html
Copyright © 2011-2022 走看看