备忘录模式
2016-01-22 16:55
423 查看
今天无意间看到了备忘录模式,由于之前没有接触过,出于好奇,研究了一下,简单来说就是把当前状态记录下来,作为备份,用于意外情况发生恢复用的,有点类似于回退的意思。
备忘录设计模式,总共分为三个角色:
发起人:要备份的成员,将自身的属性信息进行备份,恢复自身的属性信息等
备忘录:存储发起人要备份的属性信息
管理者:管理备忘录对象
下面以表单信息为样例进行演示:
首先是发起人类:
下面是 备忘录类:
下面是 管理者类:
下面是具体调用方式:
到此也就将所有相关代码写完了,所以看起来还是非常简单的,下面简单罗列一下该设计模式的优缺点(摘自百度文库):
优点:
1. 将被存储的状态放在外面,不要和关键对象混在一起,可以帮助维护内聚
2. 保持关键对象的数据封装
3. 3. 提供了容易实现的恢复能力
缺点:
1. 储存和恢复状态的过程可能相当耗时
用途 :
备忘录模式用于存储状态,在java中可以使用序列化。
经典例子:
游戏中途保存游戏,这时候可以调用保存当前状态方法,再读取的时候调用读取。Java序列化机制在这方面非常的方便。
备忘录设计模式,总共分为三个角色:
发起人:要备份的成员,将自身的属性信息进行备份,恢复自身的属性信息等
备忘录:存储发起人要备份的属性信息
管理者:管理备忘录对象
下面以表单信息为样例进行演示:
首先是发起人类:
/** * 发起者 * */ public class TableInfo { /**编号*/ private int id; /**名字*/ private String name; /**工作*/ private String job; /**地址*/ private String address; public TableInfo(int id,String name,String job,String address){ this.id=id; this.name=name; this.job=job; this.address=address; } /**恢复状态*/ public void recovery(Copy copy){ this.id=copy.getId(); this.name=copy.getName(); this.job=copy.getJob(); this.address=copy.getAddress(); } /**备份状态*/ public Copy backup() { Copy copy=new Copy(); copy.setId(this.id); copy.setName(this.name); copy.setJob(this.job); copy.setAddress(this.address); return copy; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
下面是 备忘录类:
/** * *备忘录角色 */ public class Copy { /**编号*/ private int id; /**名字*/ private String name; /**工作*/ private String job; /**地址*/ private String address; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
下面是 管理者类:
/** * 管理者 * */ public class Manager { private Copy copy; public Copy getCopy() { return copy; } public void setCopy(Copy copy) { this.copy = copy; } }
下面是具体调用方式:
TableInfo tableInfo=new TableInfo(1, "Tom", "开发工程师", "北京"); Manager manager=new Manager(); manager.setCopy(tableInfo.backup()); tableInfo.setAddress("上海"); //下面是想恢复了 tableInfo.recovery(manager.getCopy());
到此也就将所有相关代码写完了,所以看起来还是非常简单的,下面简单罗列一下该设计模式的优缺点(摘自百度文库):
优点:
1. 将被存储的状态放在外面,不要和关键对象混在一起,可以帮助维护内聚
2. 保持关键对象的数据封装
3. 3. 提供了容易实现的恢复能力
缺点:
1. 储存和恢复状态的过程可能相当耗时
用途 :
备忘录模式用于存储状态,在java中可以使用序列化。
经典例子:
游戏中途保存游戏,这时候可以调用保存当前状态方法,再读取的时候调用读取。Java序列化机制在这方面非常的方便。
相关文章推荐
- 错误信息提示
- android 新特性material design 之recyclerview 详解
- Git配置SSH,并Push到GitHub上的相关流程
- Android 关闭多个Activity总结
- 虚函数
- 重学C++ (七) 类 概览
- android 汉字,拼音和英文返回大写首字母
- 混沌粒子群算法
- servlet/jsp GET/POST
- SAX解析XML
- iOS 一些技巧
- Method Swizzling
- Drawable装Bitmap,防止OOM
- FreeRtos heap1源码分析
- 测试工作中的 Mock 实现
- hdu2047
- Hdu 1070 MILK
- Java日志记录的5条规则
- jquery实现页面交互的几个小例子
- ETL开发