行为模式-备忘录模式

  行为型模式又可以分成以下四类:第一类:通过父类与子类的关系进行实现。第二类:两个类之间。第三类:类的状态。第四类:通过中间类

  备忘录模式属于第三类,类的状态

  记录一个类的某个时刻的状态信息,在未来的某个时刻可以恢复原来的状态

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);  
	}
}

   运行结果

猜你喜欢

转载自www.cnblogs.com/liunianfeiyu/p/10153435.html