設計モード-メモモード(Memento)


主な目的は、オブジェクトのステータスを保存して、適切なタイミングでオブジェクトを復元することです.個人的にはバックアップモードと呼ぶほうがイメージ的だと思います.
一般的に言えば、元のクラスA、Aには様々な属性があると仮定し、Aはバックアップが必要な属性を決定することができ、メモクラスBはAの内部状態を格納するために使用される.
クラスCは、メモを格納するためのものであり、格納しかできず、変更できないなどの操作である.
Originalクラスは元のクラスで、保存する必要がある属性valueと、value値を保存するためのメモクラスを作成します.
Mementoクラスは覚書クラス,Storageクラスは覚書を格納するクラスであり,Mementoクラスのインスタンスを持つパターンは理解しやすい.
◆Original :
public 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();
	}
}

◆Memento :
public 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;
	}
}

◆Storage 
public 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;
	}
}

◆   :
public 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());
	}
}

◆  :
      :egg
       :niu
       :egg
オリジナルクラスを新規作成するとvalueがeggに初期化され、その後修正され、valueの値をniuに設定し、最後に最後から2行目でリカバリ状態になり、結果的にリカバリに成功しました.