行为模式---备忘录模式

备忘录模式

备忘录模式主要解决那些需要记录状态(数据)的类,恢复状态的问题,这个和状态模式有些类似,状态模式解决状态之间流转问题,即状态流转是事先固定在状态类内部的;备忘录解决的类的某一时刻状态的记录,其实也就是类在某一时刻的数据,而数据的变化不是事先固定的,有一定的不确定性并且不需要流转,但需要数据全面
类图:
这里写图片描述
原发类:
可以使用内部类方式(黑盒方式,不暴露自己数据结构),也可以使用外部类方式

public class Originator {
    private String state;

    public String getState() {
        return state;
    }

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

    // 创建状态
    public Memento createMemento() {
        return new ConcrateMemento(state);
    }

    // 恢复状态
    public void restoreMemento(Memento memento) {
        this.state = ((ConcrateMemento) memento).state;
    }

    // 内部类方式实现,不对外暴露数据结构,其实状态类存的就是原发类的数据
    private class ConcrateMemento implements Memento {
        private String state;

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

备忘录类:
这里只是使用一个声明式接口而已,具体实现在原发类中

public interface Memento {

}

负责人类:
负责人类只是持有状态,可以省略,省略就将备忘录模式变为自诉历史的备忘录模式,也可以扩展,即持有多个状态,就变为了多重检查点的备忘录模式

public class Caretaker {
    private Memento memento;

    public Memento getMemento() {
        return memento;
    }

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

猜你喜欢

转载自blog.csdn.net/weixin_43060721/article/details/82431364