【设计模式】12.备忘录模式

备忘录模式

  备忘录(Memento)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

结构图:

Originator:发起者,创建备忘录来记录内部状态,并可以利用备忘录恢复。

Caretaker:管理者,负责保存备忘录。

Memeto:备忘录,记录Originator内部状态。

例:

public class Memeto {             // 备忘录
    private String state;

    public Memeto(String state) { // 记录数据到备忘录
        this.state = state;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }
}
public class Caretaker {   // 管理者
    private Memeto memeto;

    public Memeto getMemeto() {     // 获取备忘录
        return memeto;
    }

    public void setMemeto(Memeto memeto) {  // 设置备忘录
        this.memeto = memeto;
    }
}
public class Originator {  // 发起者
    private String state;

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public Memeto createMemeto(){         // 创建备忘录
        return new Memeto(state);
    }

    public void setMemeto(Memeto memeto){  // 恢复备忘录
        this.state=memeto.getState();
    }

}
public class Test {
    public static void main(String[] args) {
        Originator originator = new Originator();
        originator.setState("状态1");         // 设置初始状态1
        System.out.println("初始状态:" + originator.getState());

        Caretaker caretaker = new Caretaker();
        caretaker.setMemeto(originator.createMemeto());  // 利用originator创建初始状态1的备忘录,然后由caretaker负责保存

        originator.setState("状态2");        // 更改状态
        System.out.println("更改后的状态:" + originator.getState());

        originator.setMemeto(caretaker.getMemeto());   // 恢复保存到备忘录的状态
        System.out.println("恢复初始状态后的状态:" + originator.getState());
    }
}

输出:

初始状态:状态1
更改后的状态:状态2
恢复初始状态后状态:状态1
原文地址:https://www.cnblogs.com/jiazhongxin/p/12848995.html