存储当前的数据信息,用于恢复---备忘录模式
来源:互联网 发布:贵州乐高机器人ev3编程 编辑:程序博客网 时间:2024/06/08 19:49
咱们在打游击的时候,经常出现以下情况:自己在玩某种游戏快挂的时候,系统提示是否恢复到原来的状态进行重新开战。有人说这个是把这个类才有用原型模式克隆一个和原来一模一样的对象,把原来的数据信息保存起来,然后在恢复就OK了。错了,兄弟,这样会使得我们的对象的所有的方法暴露出来。在不破坏封装机构的前提下,我们如何用代码实现?
我们今天讲讲备忘录模式,解决刚才我们上段提到的问题。在不破坏封装的前提下,捕获一个对象内部状态,并在该对象外部保存状态;这样以后可将改对象恢复到原先保存的状态,这就是备忘录模式。采用这种设计模式,隐蔽了备份的细节;我们前台代码看不到实际的备份过程。当我们的备份内容发生改变的时候,我们只需修改备忘录类对象中的内容就可以了。其实咱们的很多设计模式都是尽量让前台的代码修改转到后台中去,减少前台发布的次数(若频繁发布,客户会对系统产生质疑、况且有些系统发布需要漫长的时间)。
具体的代码如下:
//发起类()class Originator{ //需保存的属性 private string state; public string State {set{state=value;}get{return state;} } //在没有破坏封装的基础下,实现类对象属性的数据的保存,并保存在外部环境中 public Memento createMemento() {return new Memento(state); } public void setMemento(Memento memento) { state=memento.state; } public void show() {Console.WriteLine("当前状态为:"+state); } }//Memento类对需要备份的数据进行导入class Memento{ private string state; //这个地方没有set,只能再构造函数中赋值 public string State {get{return state;} } public Memento(string state) {this.state=state; }}//负责保管好备份的数据,但不能进行操作class CareTaker{ private Memento memento; public Memento Memento {set{memento=value;}get{return memento;} }}//客户端static void Main(string[] arg){Originator o=new Originator();o.state="100%";//....CareTaker c=new CareTaker();c.Memento=o.createMemento();//......o.setMemento(s.Memento)}
咱们在实际项目开发过程中,若遇到类似的情况;就直接按照以上方式进行套用就可以了。嘻嘻,主要还是得要大家理解它的做法。
0 0
- 存储当前的数据信息,用于恢复---备忘录模式
- 备忘录模式:暂存数据到以对象以便随后恢复数据
- 一次RAID信息丢失的数据恢复
- 备份与数据恢复的存储过程
- ceph存储 PG的数据恢复过程
- 存储和恢复数据
- rails enum用于存储数据
- 1.1存储用于测试用例的数据
- 备忘录模式的探讨
- 用于场景恢复的函数
- 用于asp.net还原与恢复SqlServer数据库的KillSpid存储过程
- Rolap的数据存储模式
- 改变数据的存储模式
- Hive的数据存储模式
- Hive的数据存储模式
- Hive的数据存储模式
- Hive的数据存储模式
- Hive的数据存储模式
- 阿里巴巴进货技巧
- spark:spark启动、spark-shell启动及测试--7
- JDK,JRE,JVM区别与联系
- DB2插入SQL备份
- 偏振式投影
- 存储当前的数据信息,用于恢复---备忘录模式
- 抽象类和接口
- SVN CornerStone的使用
- c语言编程基础------0.2GCC和GNU的关系,以及GCC的用法
- 试试Linux下的ip命令,ifconfig已经过时了
- 摄像头
- Qt 去掉窗口的标题栏
- 2014年年度总结
- SOAP UI 创建SOAP工程进行接口测试