博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读书笔记15:备忘录模式
阅读量:6994 次
发布时间:2019-06-27

本文共 2982 字,大约阅读时间需要 9 分钟。

 1、  概念

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

2、  模型

角色:

Originator(发起者)——创建备忘录Memorandum,并且根据需要决定,需要保存那些状态。

Memorandum(备忘录)——负责存储Originator对象的内部状态,并防止Originator以外的对象访问这个备忘录。

Caretaker(管理者)——负责保存备忘录。

程序模型:

//发起者,需要保存状态的对象

public class Originator      {          private string stateString1;            public string StateString1          {              get { return stateString1; }                set { stateString1 = value; }          }            private string stateString2;            public string StateString2          {              get { return stateString2; }                set { stateString2 = value; }          }              public Memorandum CreateMemorandum()          {              return new Memorandum(stateString1, stateString2);          }            public void SetMemorandum(Memorandum memorandum)          {              StateString1 = memorandum.StateString1;                StateString2 = memorandum.StateString2;          }            public void ShowMemorandum()          {              Console.WriteLine("当前状态:");                Console.WriteLine("StateString1={0}", stateString1, stateString2);                Console.WriteLine("StateString2={0}", stateString1, stateString2);          }      }

// 存储Originator,其中包括的参数和要存的Originator参数一致

public class Memorandum      {          private string stateString1;            private string stateString2;            public Memorandum(string state1, string state2)          {              this.stateString1 = state1;                this.stateString2 = state2;          }            public string StateString1          {              get { return stateString1; }          }            public string StateString2          {              get { return stateString2; }          }      }

管理者:

public class CareTaker      {          private Memorandum memorandum;            public Memorandum MemorandumClass          {              get { return memorandum; }                set { memorandum = value; }          }        }

调用:

static void Main(string[] args)          {              //发起者参数状态初始化              Originator originator = new Originator();                originator.StateString1 = "参数StateString1——初始化1";                originator.StateString2 = "参数StateString2——初始化1";                originator.ShowMemorandum();                //保存一份备份              CareTaker careTaker = new CareTaker();                careTaker.MemorandumClass = originator.CreateMemorandum();                //发起者参数状态改变了              originator.StateString1 = "参数StateString1——初始化2";                originator.StateString2 = "参数StateString2——初始化2";                originator.ShowMemorandum();                //读取保存的进度              originator.SetMemorandum(careTaker.MemorandumClass);                originator.ShowMemorandum();                Console.ReadKey();          }

结果:

   

    备忘录模式,实际就是将一个类的当前状态保存一份放着,当状态改变以后,后面需要的时候再去读取保存的状态。而怎么去保存呢,Memorandum承担了保存参数的状态。如果一个类没有行为,而只有属性的话,那么Memorandum就可以写成和发起者一样的类型,保存的时候就可以保存发起者的实例。

转载地址:http://wtivl.baihongyu.com/

你可能感兴趣的文章
js实现依赖注入
查看>>
设计模式学习
查看>>
顶部浮层
查看>>
C语言基础教程读书笔记5.1(第五章函数和存储类1)
查看>>
禁用IPV6
查看>>
第一章,Linux常用命令
查看>>
第六章 用户及权限管理
查看>>
如何在列表页面调用自定义字段值显示
查看>>
DataSet数据集在使用sql()时,无法使用map,flatMap等转换算子的解决办法
查看>>
mysql之连接知识
查看>>
舒化鲁:力拔山河的项羽,却败给了无赖小亭长
查看>>
做一个联动的select下拉菜单,让用户归类的选择
查看>>
qemu创建虚拟机powerpc
查看>>
grep及正则表达式详解
查看>>
我的友情链接
查看>>
grep/egrep
查看>>
spring 使用小结
查看>>
我的友情链接
查看>>
一个对含中文字符串在内的字符串排序简便方法
查看>>
Dijkstra(迪杰斯特拉)算法FreePascal及c++实现
查看>>