java设计模式----备忘录模式
2015-12-31 17:35
746 查看
备忘录模式存在的意义在于在程序里面我们可能会遇到撤销操作的问题,将对象恢复到某个状态。类似事务的回滚。
备忘录模式主要有三个对象
发起人(Originator):要备份的成员,它提供一个创建备忘录的方法,将自身的信息复制到备忘录中,并提供另一个方法将备忘录中信息覆盖自身信息。
备忘录(Memento):备忘录对象中包含存储发起人状态的成员变量,它提供set,get或构造方法保存发起人状态及获取发起人状态。
管理角色(Caretaker):用于管理备忘录对象的实现类。
发起人
备忘录
管理者
测试
结果
备忘录模式主要有三个对象
发起人(Originator):要备份的成员,它提供一个创建备忘录的方法,将自身的信息复制到备忘录中,并提供另一个方法将备忘录中信息覆盖自身信息。
备忘录(Memento):备忘录对象中包含存储发起人状态的成员变量,它提供set,get或构造方法保存发起人状态及获取发起人状态。
管理角色(Caretaker):用于管理备忘录对象的实现类。
发起人
package memento; /** * @author mercy * 发起人 */ public class Originator { private String state; // 创建备忘录 public Memento createMenmento() { return new Memento(state); } // 还原 public void rollBack(Memento memento) { state = memento.getState(); } public String getState() { return state; } public void setState(String state) { this.state = state; System.out.println("当前状态是:" + state); } }
备忘录
package memento; /** * @author mercy *备忘录 */ public class Memento { //状态 private String state; public String getState() { return state; } public void setState(String state) { this.state = state; } //构造函数初始化状态 public Memento(String state){ this.state=state; } }
管理者
package memento; /** * @author mercy *管理者,管理备忘录 */ public class Caretaker { private Memento memento; public Memento getMemento() { return memento; } public void setMemento(Memento memento) { this.memento = memento; } }
测试
package memento; public class Test { public static void main(String[] args) { //创建发起人对象 Originator or=new Originator(); //设置初始状态 or.setState("On"); //创建管理者对象 Caretaker ct=new Caretaker(); //设置备份 ct.setMemento(or.createMenmento()); //更改状态 or.setState("Off"); //恢复 or.rollBack(ct.getMemento()); System.out.println(or.getState()); } }
结果
当前状态是:On 当前状态是:Off On
相关文章推荐
- Struts2 标签库讲解
- struts2常用标签详解
- JVM学习笔记(二)------Java代码编译和执行的整个过程
- springMVC dubbo zookeeper整合
- Java基础-学习笔记(一)
- 从几个sample来学习Java堆,方法区,Java栈和本地方法栈
- Eclipse快速开发快捷键
- QR二维码Java开发笔记
- Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJE
- dubbo开发(1)--- zookeeper搭建和dubbo管理端安装
- CAS SSO 4.0 增加验证码
- windows7 + iis7 + fastcgi + php5 + netbeans + xdebug 调试 php
- strut2之数据类型转换
- 时间转换报java.lang.NumberFormatException: multiple points问题
- Spring Security 3.x 完整入门教程
- jsp和js如何将java中Date类型格式化显示
- Struts2中Action由自己与由Spring管理的区别
- java递归所有文件
- Java: 复制文件最快方法
- java传送json到jni,jni传送json到java