备忘录模式 Memento

概念

备忘录模式又叫做快照模式,该模式将当前对象的内部状态保存到备忘录中,以便在需要时能将对象的状态恢复到原先保存的状态。备忘录模式提供了一种保存和恢复状态的机制,常用于快照的记录和状态的存储,在系统发生故障或数据发生不一致时能够方便地将数据恢复到某个历史状态。

备忘录的核心是设计备忘录类及用于管理备忘录的管理者类,主要角色如下:

发起人Originator
记录当前时刻的内部状态,定义创建备忘录和恢复备忘录数据的方法
备忘录Memento
负责存储对象的内部状态
状态管理者Storage
对备忘录的历史状态进行存储,定义了保存和获取备忘录状态的功能。注意备忘录只能被保存或恢复,不能进行修改。
(1)定义原始数据Original

public class Original {
    
    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
    
    public Memento createMemento(){//创建备忘录
        return new Memento(value);
    }
    
    public void restoreMemento(Memento memento){//恢复数据
        this.value=memento.getValue();
    }
}

(2)定义备忘录Memento

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;
    }
}

(3)定义备忘录管理者Storage

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;
    }
}

以上代码定义了备忘录管理者,持有备忘录实例,并提供了set/get方法用来设置和获取备忘录数据。
(4)使用备忘录

public static void main(String[] args) {
        //创建原始类
        Original original=new Original("original data");
        //创建备忘录
        Storage storage=new Storage(original.createMemento());
        //修改原始类数据
        System.out.println("原始数据:"+original.getValue());
        original.setValue("new data");
        System.out.println("当前数据 "+original.getValue());
        //恢复数据
        original.restoreMemento(storage.getMemento());
        System.out.println("恢复数据为 "+original.getValue());
    }

备忘录的使用方法比较简单,先定义一个原始数据,然后将数据存到Storage,这时可以修改数据,在我们想把数据恢复时,调用原始类的restoreMemento方法即可。执行结果如下:

备忘录模式 Memento_第1张图片

你可能感兴趣的:(java设计模式)