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