1. 程式人生 > >路一步步走>> 設計模式十八:Memento-備忘錄

路一步步走>> 設計模式十八:Memento-備忘錄

package com.test.DPs.XingWei.Memento;
/**
 * 行為型:Memento-備忘錄		外觀:作用面為 物件
 */
class Original{
	private String value;
	public String getValue(){
		return value;
	}
	public void setValue(String value){
		this.value = value;
	}
	public Original(String value){
		this.value = value;
	}
	public Memento createMemento(){
		return new Memento(value);
	}
	public void restoreMemento(Memento memento){
		this.value = memento.getValue();
	}
}
class Memento{
	private String value;
	public Memento(String value){
		this.value = value;
	}
	public String getValue(){
		return value;
	}
	public void setValue(String value){
		this.value = value;
	}
}
class Storage{
	private Memento memento;
	public Storage(Memento memento){
		this.memento = memento;
	}
	public Memento getMemento(){
		return memento;
	}
	public void setMemento(Memento memento){
		this.memento = memento;
	}
}
/**
 * 用途:在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可將該物件恢復到原先儲存的狀態。
 * 
 * 理解:類 似數學,先設 已知條件-未知數 x、y、z類:原物件-狀態類-儲存類
 */
class Test{  
	public static void main(String[] args) {  
        Original origi = new Original("egg");  					// 建立原始類  
        Storage storage = new Storage(origi.createMemento()); 	// 建立備忘錄  
        
        System.out.println("初始化狀態為:" + origi.getValue());  	// 修改原始類的狀態  
        origi.setValue("niu");  
        System.out.println("修改後的狀態為:" + origi.getValue());  
        
        origi.restoreMemento(storage.getMemento());  			// 回覆原始類的狀態  
        System.out.println("恢復後的狀態為:" + origi.getValue());  
    }  
}