您的位置:首页 > 其它

备忘录模式之备份是一种态度

2014-05-13 19:20 387 查看
    有些事,错误了就是永远;有些人,一转身就是一辈子,不要轻易忽略任何爱,哪怕只是前天母亲节一通平凡的电话;时光走着她的路,路过青春的脚步,每个人或许都有遗憾的时候,总是要等到睡觉前,才知道功课只做了一点点

总是要等到考试后,才知道该念的书都没有念,为了让自己的人生少些许遗憾,需要我们做好时间管理,提前做好准备,认真思量之后再做打算。

        但是在神奇的编程世界中,有一种魔法,可以让你避免很多遗憾,强大的word中具有“Ctrl+Z”的功能,PS等一些软件中,也具有此类功能,基本上所有的带编辑功能的软件都具有撤销这个功能,撤销功能给了我们恢复先前状态的机会。拿我们电脑系统而言,可以进行备份,把系统打成压缩包就是备份,为了在系统出现崩溃情况或中毒时还原成以前的样子!今天我们的模式就从备份开始说起,备忘录模式----在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。一如她自己的名字,就是为了备忘,首先我们来看一下备忘录模式的结构图:

         


        刚开始接触的电脑的时候,首先需要掌握的就是学会装系统,装来装去,免不了有点儿麻烦,这个时候,有了新的需求,就有了新的解决方案,那就是对我们先前的电脑进行备份,有句话这样说,备份是一种态度, 以电脑备份为例,看看备忘录模式如何在实际中运用:

          发起人(Originator)类

          

[csharp] view
plaincopyprint?





<span style="font-size:18px;">public class WindowsSystem  

    {  

        private string status;  

                                          //需要保存的属性  

        public string Status  

        {  

            get  
            {  

                return status;  

            }  

            set  

            {  

                status = value;  

            }  

        }  

  

  

        public Memento createOtherSystem()             //创建备忘录  

        {  

            return new Memento(status);  

        }  

        public void recoverSystem(Memento m)           //恢复备忘录  

        {  

            this.status = m.Status;  

        }  

    }</span>  

           备忘录(Memento)类

              

[csharp] view
plaincopyprint?





<span style="font-size:18px;">public class Memento  

    {  

        private string status;  

                           

        public string Status  

        {  

            get  

            {  

                return status;  

            }  

            set  

            {  

                Console.WriteLine("系统处于:" + this.status);  

                status = value;  

            }  

        }  

  

        public Memento(string status)  

        {  

            this.status = status;  

        }  

    }</span>  

           管理者(Caretaker)类

           

[csharp] view
plaincopyprint?





<span style="font-size:18px;">public class UserComputer  

    {  

        private Memento memento;  

  

        public Memento recoverMemento()  

        {  

            // 恢复系统    

            return this.memento;  

        }  

  

        public void createMemento(Memento memento)  

        {  

            // 保存系统    

            this.memento = memento;  

        }  

    }  </span>  

         客户端程序

         

[csharp] view
plaincopyprint?





<span style="font-size:18px;"> class Program  

    {  

        static void Main(string[] args)  

        {  

            WindowsSystem Win8 = new WindowsSystem(); // Win8系统    

            UserComputer user = new UserComputer();   

            Win8.Status = "良好的状态"; // Win8处于良的运行状态    

            user.createMemento(Win8.createOtherSystem()); // 用户进行备份,Win8系统产生备份文件    

            Win8.Status = "状态较差"; // Win8处于较差的状态  

            Win8.recoverSystem(user.recoverMemento()); // 用户发出命令,进行备份还原   

            Console.WriteLine("当前系统处于" + Win8.Status);  

            Console.ReadKey();    

        }  

    }</span>  

        在软件开发中,有时需要保存一个对象的状态,以便于允许用户取消相关操作或者从以往的状态中恢复过来。比如一个文档版本管理系统,可以根据需要将指定文档恢复到之前保存过的任意一个状态。这时就可以通过备忘录模式来实现。备忘录模式在我们生活中的应用还有很多,比如象棋中的悔棋功能,游戏中的存档功能,都是备忘录在实际生活中的应用。

        用好备忘录,让我们的人生中少些许遗憾和后悔,多一份精彩,多一份期待......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: