メモモード(Memento)

2433 ワード

カプセル化性を破壊しない前提で,1つのオブジェクトの内部状態をキャプチャし,そのオブジェクトの外にこの状態を保存する.これにより、オブジェクトを元の保存状態に戻すことができます.メモモードの主な目的は、1つのオブジェクトのある状態を保存して、適切な時にオブジェクトを回復することであり、バックアップモードと呼ぶほうがイメージ的だと思います.一般的に言えば、元のクラスAがあると仮定すると、Aには様々な属性があり、Aはバックアップが必要な属性を決定することができ、メモクラスBはAのいくつかの内部状態を格納するために使用され、クラスCは、メモを格納するために使用されます.保存のみ可能で、変更などの操作はできません.Originalクラスは元のクラスで、保存する必要がある属性valueと、value値を保存するためのメモクラスを作成します.Mementoクラスは覚書クラス,Storageクラスは覚書を格納するクラスであり,Mementoクラスのインスタンスを持つパターンは理解しやすい.
ソースコードを直接見る:
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();  
    }  
} 
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;  
    }  
} 
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行目でリカバリ状態になり、結果的にリカバリに成功しました.実はこのモードは「バックアップ-リカバリ」モードが最もイメージされています.