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();
    
            }
  • 相关阅读:
    系统程序员成长计划并发(二)(下)
    Web开发必知的八种隔离级别
    国产Android视频,Broncho A1
    Android中的BatteryService及相关组件
    Struts2输出XML格式的Result
    系统程序员成长计划并发(三)(上)
    入选”第一期中国最受欢迎50大技术博客”
    Broncho团队招聘应届毕业生(包括大四学生) 2名
    系统程序员成长计划并发(三)(下)
    WordPress MailUp插件‘Ajax’函数安全绕过漏洞
  • 原文地址:https://www.cnblogs.com/vichin/p/11804896.html
Copyright © 2011-2022 走看看