大话设计模式-备忘录模式

版权声明:Leo.All Rights Reserved. https://blog.csdn.net/qq_41113081/article/details/89705314

在这里插入图片描述

发起人 即需要备忘的类

/**
 * 发起人 即需要备忘的类
 */
public class Originator {
    /**
     * 需要保存的状态 可能有多个
     */
    private String state;

    /**
     * 备忘当前状态
     *
     * @return 备忘录对象
     */
    public Memento CreateMemento() {
        return new Memento(state);
    }

    /**
     * 使用备忘录恢复数据
     *
     * @param memento
     */
    public void setMemento(Memento memento) {
        this.state = memento.getState();
    }

    @Override
    public String toString() {
        return "当前状态 : " + state;
    }

    public String getState() {
        return state;
    }

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

备忘录 用于保存某个事物的状态信息

/**
 * 备忘录类
 */
public class Memento {
    private String state;

    public Memento(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }

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

备忘录管理者 对客户端隐藏备忘录的具体实现

/**
 * 管理者类
 */
public class Caretaker {
    private Memento memento;

    public Memento getMemento() {
        return memento;
    }

    public void setMemento(Memento memento) {
        this.memento = memento;
    }
}

测试主类

/**
 * 客户端
 */
public class Main {
    public static void main(String[] args) {
        Originator originator = new Originator();
        originator.setState("状态 1");
        System.out.println(originator);

        Caretaker caretaker = new Caretaker();
        //此处保存当前状态 用于后续的还原
        caretaker.setMemento(originator.CreateMemento());

        originator.setState("状态 2");
        System.out.println(originator);

        //恢复之前的状态
        originator.setMemento(caretaker.getMemento());
        System.out.println(originator);

    }
}

输出结果

当前状态 : 状态 1
当前状态 : 状态 2
当前状态 : 状态 1

猜你喜欢

转载自blog.csdn.net/qq_41113081/article/details/89705314