设计模式——备忘录模式
2015-05-30 17:29
344 查看
备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。
备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。
简单的说备忘录模式就是在想让对象回到原来某个时间点的状态时,可以通过撤销(undo)来简单的实现。
在备忘录模式中,源发器对象是要备忘的对象。备忘录对象用来备忘某个时间点的对象状态。负责人对象用来记录备忘的那个时间点。
备忘录有;两个重要的目标:一个是存储系统关键对象的重要状态,二是维护关键对象的封装。
看一个介绍:/content/4035040.html
看一个Demo:
PS:深度备忘,保证对象中的属性对象不会随着源发对象的改变而改变,参考原型模式中的深度拷贝。
备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。
简单的说备忘录模式就是在想让对象回到原来某个时间点的状态时,可以通过撤销(undo)来简单的实现。
在备忘录模式中,源发器对象是要备忘的对象。备忘录对象用来备忘某个时间点的对象状态。负责人对象用来记录备忘的那个时间点。
备忘录有;两个重要的目标:一个是存储系统关键对象的重要状态,二是维护关键对象的封装。
看一个介绍:/content/4035040.html
看一个Demo:
/** * 源发器对象 * @author wxisme * */ public class Emp { private String name; private int age; public Emp(String name, int age) { this.age = age; this.name = name; } //数据恢复 public void recovery(EmpMemento emt) { this.age = emt.getAge(); this.name = emt.getName(); } //备忘 public EmpMemento memento() { return new EmpMemento(this); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } public class EmpMemento { private String name; private int age; public EmpMemento(Emp emp) { this.age = emp.getAge(); this.name = emp.getName(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } public class Taker { private EmpMemento empm; public EmpMemento getEmpm() { return empm; } public void setEmpm(EmpMemento empm) { this.empm = empm; } }
PS:深度备忘,保证对象中的属性对象不会随着源发对象的改变而改变,参考原型模式中的深度拷贝。
相关文章推荐
- 【Maximum Subarray 】cpp
- iOS 修改backBarButtonItem 中的titile 字段
- Python爬虫爬取贴吧的帖子内容
- 腾讯Bugly参展北京2015QCon大会
- 大一第二学期第11周【程序阅读(1)】
- C# WinForm下DataGridView导出Excel的实现
- 串口流控制(flow control)
- 大一第二学期第8周【程序阅读(2)】
- hibernate 延迟加载
- Kronos获取自定义信息
- 这些年
- Linux批量部署无密钥脚本
- (scala实现) 在1到9(顺序不能变)之间插入+或-或什么都不插入,使得计算结果总是100
- 大一第二学期第8周【程序阅读(4)】
- C语言编程优化运行速度
- [整理] AndroidManifest.xml 标签
- webkit内核浏览器是否支持history.pushState
- 利用栈求二叉树中两节点的最近共同祖先(无父节点指针)
- 简谱音名对照表
- Oracle求部门员工工资占总工资的比率