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

来源:互联网 发布:根号等于多少怎么算法 编辑:程序博客网 时间:2024/05/01 04:41

    有些事,错误了就是永远;有些人,一转身就是一辈子,不要轻易忽略任何爱,哪怕只是前天母亲节一通平凡的电话;时光走着她的路,路过青春的脚步,每个人或许都有遗憾的时候,总是要等到睡觉前,才知道功课只做了一点点
总是要等到考试后,才知道该念的书都没有念,为了让自己的人生少些许遗憾,需要我们做好时间管理,提前做好准备,认真思量之后再做打算。

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

         

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

          发起人(Originator)类

          

[csharp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:18px;">public class WindowsSystem  
  2.     {  
  3.         private string status;  
  4.                                           //需要保存的属性  
  5.         public string Status  
  6.         {  
  7.             get  
  8.             {  
  9.                 return status;  
  10.             }  
  11.             set  
  12.             {  
  13.                 status = value;  
  14.             }  
  15.         }  
  16.   
  17.   
  18.         public Memento createOtherSystem()             //创建备忘录  
  19.         {  
  20.             return new Memento(status);  
  21.         }  
  22.         public void recoverSystem(Memento m)           //恢复备忘录  
  23.         {  
  24.             this.status = m.Status;  
  25.         }  
  26.     }</span>  
           备忘录(Memento)类

              

[csharp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:18px;">public class Memento  
  2.     {  
  3.         private string status;  
  4.                            
  5.         public string Status  
  6.         {  
  7.             get  
  8.             {  
  9.                 return status;  
  10.             }  
  11.             set  
  12.             {  
  13.                 Console.WriteLine("系统处于:" + this.status);  
  14.                 status = value;  
  15.             }  
  16.         }  
  17.   
  18.         public Memento(string status)  
  19.         {  
  20.             this.status = status;  
  21.         }  
  22.     }</span>  


           管理者(Caretaker)类

           

[csharp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:18px;">public class UserComputer  
  2.     {  
  3.         private Memento memento;  
  4.   
  5.         public Memento recoverMemento()  
  6.         {  
  7.             // 恢复系统    
  8.             return this.memento;  
  9.         }  
  10.   
  11.         public void createMemento(Memento memento)  
  12.         {  
  13.             // 保存系统    
  14.             this.memento = memento;  
  15.         }  
  16.     }  </span>  
         客户端程序

         

[csharp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:18px;"class Program  
  2.     {  
  3.         static void Main(string[] args)  
  4.         {  
  5.             WindowsSystem Win8 = new WindowsSystem(); // Win8系统    
  6.             UserComputer user = new UserComputer();   
  7.             Win8.Status = "良好的状态"// Win8处于良的运行状态    
  8.             user.createMemento(Win8.createOtherSystem()); // 用户进行备份,Win8系统产生备份文件    
  9.             Win8.Status = "状态较差"// Win8处于较差的状态  
  10.             Win8.recoverSystem(user.recoverMemento()); // 用户发出命令,进行备份还原   
  11.             Console.WriteLine("当前系统处于" + Win8.Status);  
  12.             Console.ReadKey();    
  13.         }  
  14.     }</span>  
        在软件开发中,有时需要保存一个对象的状态,以便于允许用户取消相关操作或者从以往的状态中恢复过来。比如一个文档版本管理系统,可以根据需要将指定文档恢复到之前保存过的任意一个状态。这时就可以通过备忘录模式来实现。备忘录模式在我们生活中的应用还有很多,比如象棋中的悔棋功能,游戏中的存档功能,都是备忘录在实际生活中的应用。

        用好备忘录,让我们的人生中少些许遗憾和后悔,多一份精彩,多一份期待......

0 0