备忘录模式
来源:互联网 发布:everest是什么软件 编辑:程序博客网 时间:2024/06/05 11:39
定义:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态。
/** * @author android3 * 模拟运行流程A的对象的备忘录接口,是个窄接口 */public interface FlowAMockMemento { }
public class FlowAMock { /** *流程名称,不需要外部存储的状态数据 */ private String flowName; /** * 示意,代表某个中间结果,需要外部存储的状态数据 */ private int tempResult; /** * 示意,代表某个中间结果,需要外部存储的状态数据 */ private String tempState; public FlowAMock(String flowName){ this.flowName = flowName; } /** * 示意,运行流程的第一个阶段 */ public void runPhaseOne(){ tempResult = 3; tempState = "PhaseOne"; } /** * 示意,按照方案一来运行流程后半部分 */ public void schema1(){ //示意,需要使用第一阶段产生的数据 this.tempState += ":schema 1"; System.out.println(this.tempState +" now run "+ tempResult); this.tempResult += 11; } /** * 示意,按照方案二来运行流程后半部分 */ public void schema2(){ this.tempState +=": schema2"; System.out.println(this.tempState +" now run "+ tempResult ); this.tempResult += 22; } /** * 创建备忘录对象,保存对象的状态 */ public FlowAMockMemento createMemento(){ return new MementoImpl(this.tempResult, this.tempState); } /** * 回复到备忘录记录的状态 */ public void setMemento(FlowAMockMemento memento){ MementoImpl mementoImpl = (MementoImpl) memento; this.tempResult = mementoImpl.getTempResult(); this.tempState = mementoImpl.getTempState(); } /** * @author android3 * 备忘录对象 */ private static class MementoImpl implements FlowAMockMemento{ /** * 示意,保存某个中间结果 */ private int tempResult; /** * 示意,保存某个中间结果 */ private String tempState; public MementoImpl(int tempResult,String tempState){ this.tempResult = tempResult; this.tempState = tempState; } public int getTempResult(){ return this.tempResult; } public String getTempState(){ return this.tempState; } } }
public class FlowAMementoCareTaker { /** *记录被保存的备忘录对象 */ private FlowAMockMemento memento = null; /** * 保存备忘录对象 */ public void saveMemento(FlowAMockMemento memento ){ this.memento = memento; } /** * 获取被保存的备忘录对象 */ public FlowAMockMemento retriveMemento(){ return this.memento; }}
public class Client { public static void main(String args[]){ FlowAMock mock = new FlowAMock("test flow"); mock.runPhaseOne(); //创建备忘录对象 FlowAMockMemento memento = mock.createMemento(); FlowAMementoCareTaker careTaker = new FlowAMementoCareTaker(); //保存备忘录对象 careTaker.saveMemento(memento); mock.schema1(); //恢复并重置备忘录对象 mock.setMemento(careTaker.retriveMemento()); mock.schema2(); }}
备忘录的离线存储:(应用场景:系统崩溃之恢复等)
public interface FlowAmockMemento extends Serializable { }
public class FlowAMementoFileCareTaker {public void saveMemento(FlowAmockMemento memento){ObjectOutputStream oos =null;try{oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("FlowAMemento")));oos.writeObject(memento);}catch(Exception err){err.printStackTrace();}finally{try{oos.close();}catch(Exception e){e.printStackTrace();}}}public FlowAmockMemento retriveMemento(){FlowAmockMemento memento = null;ObjectInputStream ois = null;try{ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream("FlowAMemento")));memento = (FlowAmockMemento) ois.readObject();}catch(Exception e){e.printStackTrace();}finally{try{ois.close();}catch(IOException e){e.printStackTrace();}}return memento;} }
0 0
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- ParseCommandLine
- linux命令解析--scp ssh
- android友盟注意事项
- Android多线程任务的优化2
- 闪回恢复区(Flash Recovery Area ,FRA)
- 备忘录模式
- 快速查看电脑端口占用情况命令行
- iOS系类教程之用instruments来检验你的app
- CSS 框模型样式总结
- Qt中QString转char*
- ecshop 后台增加上传图片项
- Android通讯录开发之实现删除功能
- 七天养成一个好习惯,52个星期后你就会脱胎换骨
- Oracle lpad()、rpad()函数