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

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

    将要保存的细节封装在Memento中,哪天要更改保存的细节也不影响客户端。
    Memento模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分。Originator可以根据保存的Memento信息还原到前一个状态。如果在某个系统中使用命令模式时,需要实现命令的撤销功能,那么命令模式可以使用备忘录模式来存储可撤销操作的状态。有时一些对象的内部信息必须保存在对象意外的地方,但是必须要由对象自己来读取,这时,使用备忘录模式可以把复杂的对象内部信息对其他的对象屏蔽起来,从而可以恰当的保持封装的边界。

        //发起人类
        class Origninator
        {
            public string state { get; set; }//需要保存的属性,可能是多个。
    
            public Memento CreateMemento()//创建备忘录,将当前需要保存的信息导入并实例化出一个Memento对象。
            {
                return (new Memento(state));
            }
            public void SetMemento(Memento memento)
            {
                state = memento.State;//恢复备忘录,将Memento导入将相关数据恢复。
            }
            public void Show()
            {
                Console.WriteLine("State=" + state);//显示数据
            }
        }
    
        //备忘录类
        class Memento
        {
            private string state;
            public Memento(string state)//构造方法,将相关数据导入。
            {
                this.state = state;
            }
            public string State { get { return state; } }//需要保存的数据属性,可以是多个。
        }
    
        //管理者类
        class Caretaker
        {
            public Memento memento{ get; set; }//得到或设置备忘录
    
        }
    
            static void Main(string[] args)
            {
                Origninator o = new Origninator();//Orignator初始状态,状态为"On"。
                o.state = "On";
                o.Show();
    
                Caretaker c = new Caretaker();//保存状态时,由于有了很好的封装,可以隐藏Orignator的实现细节。
                c.memento = o.CreateMemento();
    
                o.state = "Off";//Orignator改变了状态属性为"Off"。
                o.Show();
    
                o.SetMemento(c.memento);//恢复初始状态。
                o.Show();
    
            }
  • 相关阅读:
    decode函数
    自我介绍
    语法》第六章 数组
    语法》第二章 数据类型
    语法》第四章 字符串
    语法》第七章 函数
    取模和取余的区别
    语法》第五章 对象
    语法》第三章 数值
    语法》第一章 基本语法
  • 原文地址:https://www.cnblogs.com/vichin/p/11804896.html
Copyright © 2011-2022 走看看