19.设计模式-备忘录模式

所谓备忘录模式,就是把我们保存的东西放到一个地方存起来,然后我们要恢复的时候从那个地方去取这个东西。类似我们操作里面的ctrl+z撤销键,我们这边做一个简单的demo.如果有很多状态什么的,那也可以在此基础上进行新增

原始业务类

/**
 * 业务类
 */
public class Original {
    private Integer state;

    public Original(){
        this.state=0;
    }

    /**
     * 创建一个备忘录
     * @return
     */
    public Memento createMemento(){
        return new Memento(state);
    }

    public Integer getState(){
        return this.state;
    }

    /**
     * 修改状态
     */
    public void addVersion(){
        this.state = this.state+1;
    }

    /**
     * 恢复状态
     * @param memento
     */
    public void recoverFromMemento(Memento memento){
        this.state = memento.getState();
    }
}

备忘录

/**
 * 备忘录
 */
public class Memento {
    private Integer state;
    public Memento(Integer state){
        this.state = state;
    }

    public Integer getState() {
        return this.state;
    }
}

管理备忘录


/**
 * 负责管理备忘录
 */
public class Caretaker {
    Map<String,Memento> mementos = new HashMap<>();

    public void addMemento(String key, Memento memento){
        mementos.put(key,memento);
    }

    public Memento getMemento(String key){
        return mementos.get(key);
    }
}

测试

public class mementoTest {
    public static void main(String[] args) {
        Original original = new Original();
        System.out.println("保存的状态:"+original.getState());
        Memento memento = new Memento(original.getState());
        Caretaker caretaker = new Caretaker();
        caretaker.addMemento("test",memento);
        original.addVersion();
        System.out.println("修改后的状态:"+original.getState());
        original.recoverFromMemento(caretaker.getMemento("test"));
        System.out.println("恢复的状态:"+original.getState());
    }

}

测试结果

保存的状态:0
修改后的状态:1
恢复的状态:0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值