标签:
保存对象的某个状态并可以恢复到该状态
例子很多,如回退 ctri + z,回滚,ps恢复到操作历史的某一刻等等。。。
备忘录角色:存储状态
发起人角色:创建备忘录,并利用备忘录存储自己的状态
负责人:管理备忘录
客户端
例子描述:显示一个对象的历史状态
备忘录角色
package com.pichen.dp.behavioralpattern.memento; public class Memento { private String state; public Memento(String state) { this.state = state; } public String getState() { return state; } }
发起人角色
package com.pichen.dp.behavioralpattern.memento; public class State { private String state; public String getState() { return state; } public void setState(String state) { this.state = state; } public Memento saveToMemento(){ return new Memento(state); } public void restoreFromMemento(Memento memento){ this.state = memento.getState(); } }
备忘录管理者
package com.pichen.dp.behavioralpattern.memento; import java.util.ArrayList; import java.util.List; public class MementoMgt { private List<Memento> mementoList = new ArrayList<Memento>(); public void add(Memento state) { mementoList.add(state); } public Memento get(int index){ return mementoList.get(index); } public List<Memento> getMementoList() { return mementoList; } }
客户端Main
package com.pichen.dp.behavioralpattern.memento; public class Main { public static void main(String[] args) { State state = new State(); MementoMgt mementoMgt = new MementoMgt(); state.setState("state1"); mementoMgt.add(state.saveToMemento()); state.setState("state2"); mementoMgt.add(state.saveToMemento()); state.setState("state3"); mementoMgt.add(state.saveToMemento()); state.setState("state4"); mementoMgt.add(state.saveToMemento()); System.out.println("状态历史:"); for(Memento m:mementoMgt.getMementoList()){ System.out.println(m.getState()); } System.out.println("当前状态:"); System.out.println(state.getState()); state.setState(mementoMgt.getMementoList().get(1).getState()); System.out.println("恢复后的状态:"); System.out.println(state.getState()); } }
结果打印:
状态历史:
state1
state2
state3
state4
当前状态:
state4
恢复后的状态:
state2
标签:
原文地址:http://www.cnblogs.com/chenpi/p/5222287.html