设计模式--备忘录模式

Java工程源码

类图

这里写图片描述


定义
在不破坏封装性的前提下,捕获一个对象内部状态,并在该对象之外保存这个状态。
这样以后就 可将该对象恢复到原先保存的状态


使用场景
- 需要保存和恢复数据的相关状态场景
- 提供一个可回滚操作
- 需要监控的副本场景中
- 数据库连接的事务管理就是用的备忘录模式


注意事项
备忘录的性能:不要在频繁建立备份的场景中使用备忘录模式以免控制不了备忘录建立的对象数量,而且大对象的简历需要资源


备忘录类

public class Memento {
    /**
     * 备忘录状态
     */
    private String state = "";

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

    /**
     * 获取状态
     *
     * @return 状态
     */
    public String getState() {
        return state;
    }

    /**
     * 设置状态
     *
     * @param state 状态
     */
    public void setState(String state) {
        this.state = state;
    }
}

发起人角色

public class Originator {
    /**
     * 内部状态
     */
    private String state = "init";

    /**
     * 获取状态
     *
     * @return 状态
     */
    public String getState() {
        return state;
    }

    /**
     * 设置状态
     *
     * @param state 状态
     */
    public void setState(String state) {
        this.state = state;
    }

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

    /**
     * 回复一个备忘录
     *
     * @param memento 备忘录
     */
    public void restoreMemento(Memento memento) {
        setState(memento.getState());
    }
}

备忘录管理者

public class Caretaker {
    /**
     * 备忘录对象
     */
    private Memento memento;

    /**
     * 获取备忘录对象
     *
     * @return 备忘录对象
     */
    public Memento getMemento() {
        return memento;
    }

    /**
     * 设置备忘录对象
     *
     * @param memento 备忘录对象
     */
    public void setMemento(Memento memento) {
        this.memento = memento;
    }
}

场景类

public class Client {
    public static void main(String[] args) {
        // 定义发起人
        Originator originator = new Originator();
        // 定义备忘录管理者
        Caretaker caretaker = new Caretaker();
        // 创建一个备忘录
        caretaker.setMemento(originator.createMemento());
        // 读取备忘录内容
        System.out.println("备忘录状态:" + caretaker.getMemento().getState());
        System.out.println("发起人状态:" + originator.getState());
        // 改变发起人内容
        originator.setState("new state");
        // 读取发起人内容
        System.out.println("发起人状态:" + originator.getState());
        // 恢复一个备忘录
        originator.restoreMemento(caretaker.getMemento());
        System.out.println("发起人状态:" + originator.getState());
    }
}

运行结果

备忘录状态:init
发起人状态:init
发起人状态:new state
发起人状态:init
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值