zoukankan      html  css  js  c++  java
  • 行为型设计模式之备忘录模式(Memento)

    结构
    意图 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
    适用性
    • 必须保存一个对象在某一个时刻的(部分)状态, 这样以后需要时它才能恢复到先前的状态。
    • 如果一个用接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象
      1 using System;
      2 
      3     class Originator 
      4     {
      5         private double manufacturer=0;
      6         private double distributor = 0;
      7         private double retailer = 0;
      8 
      9         public void MakeSale(double purchasePrice)
     10         {
     11             // We assume sales are divided equally amount the three
     12             manufacturer += purchasePrice * .40;
     13             distributor += purchasePrice *.3;
     14             retailer += purchasePrice *.3;
     15             // Note: to avoid rounding errors for real money handling 
     16             // apps, we should be using decimal integers
     17             // (but hey, this is just a demo!)
     18         }
     19 
     20         public Memento CreateMemento()
     21         {
     22             return (new Memento(manufacturer, distributor, retailer));            
     23         }
     24         
     25         public void SetMemento(Memento m)
     26         {
     27             manufacturer = m.A;
     28             distributor = m.B;
     29             retailer = m.C;
     30         }        
     31     }
     32 
     33     class Memento 
     34     {
     35         private double iA;
     36         private double iB;
     37         private double iC;
     38 
     39         public Memento(double a, double b, double c)
     40         {
     41             iA = a;
     42             iB = b;
     43             iC = c;
     44         }
     45 
     46         public double A 
     47         {
     48             get 
     49             {
     50                 return iA;
     51             }
     52         }
     53 
     54         public double B 
     55         {
     56             get 
     57             {
     58                 return iB;
     59             }
     60         }
     61 
     62         public double C 
     63         {
     64             get 
     65             {
     66                 return iC;
     67             }
     68         }
     69     }
     70 
     71     class caretaker 
     72     {
     73         
     74     }
     75 
     76         /// <summary>
     77     ///    Summary description for Client.
     78     /// </summary>
     79     public class Client
     80     {
     81         public static int Main(string[] args)
     82         {              
     83             Originator o = new Originator();
     84             
     85             // Assume that during the course of running an application 
     86             // we we set various data in the originator
     87             o.MakeSale(45.0);
     88             o.MakeSale(60.0);
     89 
     90             // Now we wish to record the state of the object
     91             Memento m = o.CreateMemento();
     92 
     93             // We make further changes to the object
     94             o.MakeSale(60.0);
     95             o.MakeSale(10.0);
     96             o.MakeSale(320.0);
     97 
     98             // Then we decide ot change our minds, and revert to the saved state (and lose the changes since then)
     99             o.SetMemento(m);
    100 
    101             return 0;
    102         }
    103     }
    备忘录模式
  • 相关阅读:
    javascript实现网页分享至朋友圈功能
    Vue中全局过滤器期与局部过滤器期的使用
    vue中添加与删除,关键字搜索
    vue生命周期
    4种常用的Ajax请求方式
    CSS 基础总结
    BEM思想之彻底弄清BEM语法
    学习前端过程中用到的资料
    深入理解,函数声明、函数表达式、匿名函数、立即执行函数、window.onload的区别.
    html基础
  • 原文地址:https://www.cnblogs.com/ziranquliu/p/4663305.html
Copyright © 2011-2022 走看看