作者:whisper
链接:http://proprogrammar.com:443/article/459
声明:请尊重原作者的劳动,如需转载请注明出处
行为型模式又可以分成以下四类:第一类:通过父类与子类的关系进行实现。第二类:两个类之间。第三类:类的状态。第四类:通过中间类
备忘录模式属于第三类,类的状态
记录一个类的某个时刻的状态信息,在未来的某个时刻可以恢复原来的状态
package behavior.pattern.status.memento;
import java.util.Date;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.beanutils.PropertyUtils;
public class Originator {
private int state1 = 0;
private String state2 = "";
private Date state3 = new Date();
public Memento createMemento() throws Exception{
Map<String, Object> memento = PropertyUtils.describe(this);
memento.remove("class");
return new Memento(memento);
}
public void restoreMemento(Memento memento) throws Exception{
if(memento != null && memento.getStateMap() != null && memento.getStateMap().size() > 0)
{
for(Entry<String, Object> entry: memento.getStateMap().entrySet())
{
PropertyUtils.setProperty(this, entry.getKey(), entry.getValue());
}
}
}
public int getState1() {
return state1;
}
public void setState1(int state1) {
this.state1 = state1;
}
public String getState2() {
return state2;
}
public void setState2(String state2) {
this.state2 = state2;
}
public Date getState3() {
return state3;
}
public void setState3(Date state3) {
this.state3 = state3;
}
public String toString(){
return "state1="+state1+"state2="+state2+"state3="+state3;
}
}
package behavior.pattern.status.memento;
import java.util.Map;
public class Memento {
private Map<String, Object> stateMap;
public Memento(Map<String, Object> map){
this.stateMap = map;
}
public Map<String, Object> getStateMap() {
return stateMap;
}
public void setStateMap(Map<String, Object> stateMap) {
this.stateMap = stateMap;
}
}
上面两个类一个是要保存状态的类,一个是保存状态信息的备忘录类
package behavior.pattern.status.memento;
import java.util.HashMap;
import java.util.Map;
public class Caretaker {
Map<String, Memento> memMap = new HashMap<String, Memento>();
public Memento getMemento(String index){
return memMap.get(index);
}
public void setMemento(String index, Memento memento){
this.memMap.put(index, memento);
}
}
上面的类是管理状态的类,包括记录和恢复状态
测试代码
package behavior.pattern.status.memento;
import java.util.Date;
public class Client {
public static void main(String[] args) throws Exception{
Originator ori = new Originator();
Caretaker caretaker = new Caretaker();
ori.setState1(111);
ori.setState2("强盛");
ori.setState3(new Date());
System.out.println("===初始化状态===\n"+ori);
caretaker.setMemento("001",ori.createMemento());
ori.setState1(222);
ori.setState2("架构");
ori.setState3(new Date());
System.out.println("===修改后状态===\n"+ori);
ori.restoreMemento(caretaker.getMemento("001"));
System.out.println("===恢复后状态===\n"+ori);
}
}
运行结果
亲爱的读者:有时间可以点赞评论一下
全部评论