java设计模式(行为型)之备忘录模式
2014-03-17 17:44
465 查看
第0章:简介
备忘录模式定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态备忘录模式本质:保存和恢复内部状态
参考:研磨设计模式(书籍),大话设计模式(书籍)
模式图:
待补充
第1章:实践
(1)备忘录接口(Memento.java)package com.mcc.core.designPattern.behavior.memento; /** * 备忘录接口,窄接口,即没有任何方法定义的空接口 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-16 下午10:50 */ public interface Memento { //空接口 } |
package com.mcc.core.designPattern.behavior.memento; /** * 原发器对象,即使用备忘录保存和恢复自身状态的对象 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-16 下午10:52 */ public class Originator { //原发器的状态数据 private Integer data = 0; /** * 获取原生器数据 * @return */ public Integer getData() { return data; } /** * 数据写入备忘录。创建备忘录对象并保存原发器的状态数据,数据的中间态,后面需再次用到此状态下得数据 * @return */ public Memento createMemento(){ return new MementoImpl(data); } /** * 读取备忘录数据。重新设置原发器的的数据为中间态数据,原发器重回到写入备忘录时的状态 */ public void resetData(Memento memento){ //获得备忘录 MementoImpl mementoImpl = (MementoImpl)memento; //用备忘录数据重置原发器数据 this.data = mementoImpl.getStateData(); } /** * 流程1,公共流程,此流程产生的数据将记录进备忘录,供后面不同流程分支重复使用 */ public void methodStep1(){ data = data + 5; } /** * 流程2的A分支,分支流程,需用到流程1产生的数据,即备忘录中的数据 */ public void methodStep2A(){ data = data + 10; } /** * 流程2的B分支,分支流程,需用到流程1产生的数据,即备忘录中的数据 */ public void methodStep2B(){ data = data * 10; } /** * 备忘录对象,用了保存原发器的中间态数据,是私有的类级内部类,不让外部直接访问 */ private static class MementoImpl implements Memento{ //状态数据,是原发器某一时刻的中间态数据 private Integer stateData = null; /** * 构造器,传入中间态数据 * @param stateData */ public MementoImpl(Integer stateData){ this.stateData = stateData; } /** * 创建后,一般外部不能再修改数据,只能读取数据,所以没有相应的setter方法 * @return */ public Integer getStateData(){ return stateData; } } } |
package com.mcc.core.designPattern.behavior.memento; /** * 备忘录持有者,用了保存备忘录 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-16 下午11:41 */ public class MenentoTaker { //持有备忘录对象 private Memento memento; public Memento getMemento() { return memento; } public void setMemento(Memento memento) { this.memento = memento; } } |
package com.mcc.core.designPattern.behavior.memento; /** * 客户端测试 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-16 下午11:48 */ public class Client { public static void main(String args[]){ //原生器 Originator originator = new Originator(); System.out.println("运行流程1,原生数据初始化为0,流程将数据加5"); originator.methodStep1(); //创建备忘录,记录中间态数据 Memento memento = originator.createMemento(); //将备忘录交给备忘录管理者管理 MenentoTaker menentoTaker = new MenentoTaker(); menentoTaker.setMemento(memento); System.out.println("流程1完成,原生数据为:" + originator.getData()); //从备忘录管理者中获取备忘录 Memento memento2A = menentoTaker.getMemento(); //重置原生器数据为备忘录数据 originator.resetData(memento2A); System.out.println("重置原生器数据为:" + originator.getData()); System.out.println("运行流程2的A分支,流程将加10"); //运行流程2的A分支 originator.methodStep2A(); System.out.println("流程2的A分支完成,原生数据为" + originator.getData()); //从备忘录管理者中获取备忘录 Memento memento2B = menentoTaker.getMemento(); //重置原生器数据为备忘录数据 originator.resetData(memento2B); System.out.println("重置原生器数据为:" + originator.getData()); System.out.println("运行流程2的B分支,流程将乘以10"); //运行流程2的B分支 originator.methodStep2B(); System.out.println("流程2的B分支完成,原生数据为" + originator.getData()); } } |
相关文章推荐
- Java设计模式(行为型)之-备忘录模式(Memento)
- java设计模式--行为型模式--备忘录模式
- java-设计模式(行为型)-【备忘录模式】
- Java设计模式_行为型_备忘录模式_大话西游之月光宝盒
- java设计模式--行为型模式--状态模式
- Java设计模式之行为型模式(状态模式)
- java设计模式--行为型模式--策略模式
- java设计模式之备忘录模式Memento
- JAVA设计模式--备忘录模式
- java设计模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式、适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式,。 行为型模式,共十一种:策略模式、模板方法)
- Java经典23种设计模式之行为型模式(三)
- 设计模式--备忘录模式Memento(行为型)
- Java设计模式_(行为型)_访问者模式
- 设计模式--行为型--备忘录模式
- Java与设计模式(二十六)行为型--迭代器模式
- JAVA设计模式(17):行为型-模板方法模式(Template Method)
- JAVA设计模式(23):行为型-访问者模式(Visitor)
- 设计模式笔记--行为型模式之六--Memento 备忘录
- JAVA设计模式--行为型模式(2)
- 详解Java设计模式之备忘录模式的使用