设计模式-备忘录
2016-02-20 18:27
387 查看
1.核心:保存某个对象内部状态的copy,可以将该对象恢复到原先的状态
2.结构:
<1>发起人(Originator):要被备分的成员,提供创建备忘录的方法,就是将它自身的某些信息copy一份到一个备忘录对象中。并提供另外一个方法将备忘录中的信息覆盖自身的信息
<2>备忘录(Memeto):备忘录对象中包含存储发起人状态的成员变量,它提供set,get或构造方法保存发起人状及获取发起人状态
<3>管理角色(Caretaker):用于管理备忘录对象的实现类
-负责保存备忘录对象
-可以通过容器,设置多个 “备忘点”
- 备忘点较多时,将备忘录压栈
- 将多个备忘录对象,序列化和持久化
3.开发场景:
数据库软件中的,事务管理中的回滚操作
4.示例代码:
<1>发起对象
2.结构:
<1>发起人(Originator):要被备分的成员,提供创建备忘录的方法,就是将它自身的某些信息copy一份到一个备忘录对象中。并提供另外一个方法将备忘录中的信息覆盖自身的信息
<2>备忘录(Memeto):备忘录对象中包含存储发起人状态的成员变量,它提供set,get或构造方法保存发起人状及获取发起人状态
<3>管理角色(Caretaker):用于管理备忘录对象的实现类
-负责保存备忘录对象
-可以通过容器,设置多个 “备忘点”
- 备忘点较多时,将备忘录压栈
- 将多个备忘录对象,序列化和持久化
3.开发场景:
数据库软件中的,事务管理中的回滚操作
4.示例代码:
<1>发起对象
//发起人,拥有保存备忘点和从备忘点恢复状态的方法 public class Originator { private String name; private int age; private double salary; public Originator(String name, int age, double salary) { super(); this.name = name; this.age = age; this.salary = salary; } //保存对象状态 public Memeto Save(){ return new Memeto(this); } //恢复对象状态 public void recovery(Memeto memeto){ this.age=memeto.getmAge(); this.name=memeto.getmName(); this.salary=memeto.getmSalary(); } @Override public String toString() { return "Originator [name=" + name + ", age=" + age + ", salary=" + salary + "]"; } 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 double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } }
<2>备忘录对象:
//备忘录对象 public class Memeto { private String mName; private int mAge; private double mSalary; public Memeto(Originator org){ this.mAge=org.getAge(); this.mSalary=org.getSalary(); this.mName=org.getName(); } public String getmName() { return mName; } public void setmName(String mName) { this.mName = mName; } public int getmAge() { return mAge; } public void setmAge(int mAge) { this.mAge = mAge; } public double getmSalary() { return mSalary; } public void setmSalary(double mSalary) { this.mSalary = mSalary; } }
<3>负责人对象:
//负责人类,保存备忘录对象,如果存在多个备忘录对象,可以放到容器中保存,或者序列化,持久化到磁盘中 public class CareTaker { private Memeto memeto; public Memeto getMemeto() { return memeto; } public void setMemeto(Memeto memeto) { this.memeto = memeto; } }
<4>客户端:
//客户端 public class Client { public static void main(String[] args) { CareTaker careTaker=new CareTaker(); Originator oriV1=new Originator("cash", 50, 8000); System.out.println("原始对象:"+oriV1); Memeto memeto=oriV1.Save(); careTaker.setMemeto(memeto); //修改对象状态 oriV1.setAge(74); oriV1.setName("UDP"); oriV1.setSalary(7400); System.out.println("修改后对象:"+oriV1); //恢复对象 oriV1.recovery(careTaker.getMemeto()); System.out.println("恢复后对象(应与原对象一致):"+oriV1); } }
执行结果:
原始对象:Originator [name=cash, age=50, salary=8000.0] 修改后对象:Originator [name=UDP, age=74, salary=7400.0] 恢复后对象(应与原对象一致):Originator [name=cash, age=50, salary=8000.0]
<5>示例用类图:
相关文章推荐
- Vert.x 3学习笔记---03
- AngularJs基础
- IOS-KVC/KVO
- Android Monkey 测试策略【转】
- spark源码学习(六)--- DAGScheduler中的task的划分
- C程序浅议
- EXT4中恢复使用rm命令误删除的文件
- 前端程序员必知的30个Chrome扩展-[转载]
- 云计算IaaS浅谈
- 实时采集数据的动态曲线控件
- LeetCode 64. Minimum Path Sum 解题报告
- Codeforces 628D Magic Numbers 【数位dp】
- onenote发送至博客实践
- Codeforces 628C Bear and String Distance 【构造】
- Android&java的成长之路之四(自定义字母索引)
- Codeforces 628B New Skateboard【数学】
- Codeforces 628A Tennis Tournament 【水题】
- Android项目使用support v7时遇到的各种问题
- Android Widget学习笔记
- hihoCoder week 85 Numeric Keypad 【DFS】