设计模式-备忘录模式

什么叫备忘录?两个字,回滚。备忘录模式可以记录一个对象的内部状态,当需要的时候可以将对象恢复到之前的状态

备忘录模式有三个角色:发起者,备忘录,管理者。简而言之,发起者对对象发生改动的时候自己备份一份备忘录交给管理者。每次发起者需要恢复数据的时候找管理者,管理者找出备忘录的数据交给发起者。

发起者只负责更改的时候备份一份然后交给管理者,发起者可以访问备忘录的所有信息。管理者对发起者创建的备忘录进行管理,只有保存和查看的权限,无法对备忘录进行修改。

发起者

public class Originator {
    private String state;

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }
    public Memento createMemento(){
        return new Memento(state);
    }
    public void restoreMemento(Memento m){
        this.setState(m.getState());
    }
}

备忘录

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 manager {
    private Memento memento;
    public void setMemento(Memento m){
        this.memento=m;
    }
    public Memento  getMemento(){
        return memento;
    }
}

测试类

public class Client {
    public static void main(String[] args) {
        //发起人
        Originator or = new Originator();
        //管理者
        manager manager = new manager();
        or.setState("状态A");
        manager.setMemento(or.createMemento());
        or.setState("状态B");
        or.restoreMemento(manager.getMemento());
        System.out.println(or.getState());
    }
}

可以看出,管理者只是协助发起者管理备忘录的一个类,他在发起者需要恢复状态的时候获取备忘录交给请求者。简而言之,管理者就是一个替老板拿钱包的,在老板需要掏钱的时候把钱包提给老板。

应用场景:游戏中的存档啊,事务的回滚啊,文档的撤销等等

不和别人一样,不复制只真正理解
原文地址:https://www.cnblogs.com/Vinlen/p/12795640.html