备忘录模式

前言

备忘录模式通常不怎么用,它也是一种行为型设计模式。数据库

目录

1、定义

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

2、模式原理分析

备忘录模式包含两个关键角色缓存

  • 原始对象(Originator):除了建立自身所须要的属性和业务逻辑外,还经过提供方法 create()restore(memento) 来保存和恢复对象副本markdown

  • 备忘录(Memento):用于保存原始对象的全部属性状态,以便在将来进行撤销操做函数

下面举的是单状态备忘录模式,多状态就须要用到Map集合了。性能

//发起人角色
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(this.state);
    }
    //恢复一个备忘录
    public void restoreMemento(Memento _memento){
        this.setState(_memento.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 Caretaker{
    //备忘录对象
    private Memento memento;
    public Memento getMemento(){
        return 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());
        //恢复一个备忘录
        originator.restoreMemento(caretaker.getMemento());
    }
}
复制代码

3、使用场景

  • 须要保存一个对象在某一个时刻的状态时刻this

  • 提供一个可回滚的操做,好比Word中的CTRL + Z 组合键spa

  • 须要监控的副本场景中。例如要监控一个对象的属性,可是监控又不该该做为系统的主业务来调用,能够考虑备份一个副本,在子线程中分析处理线程

  • 数据库链接的事务管理就是用的备忘录模式设计

4、优势

  • 可以快速撤消对对象状态的更改

  • 可以提高代码的扩展性。 备忘录模式是经过增长外部对象来保存原始对象的状态,而不是在原始对象中新增状态记录,当再也不须要保存对象状态时就能很方便地取消这个对象。同理,新增备忘录对象也很是容易

  • 可以帮助缓存记录历史对象状态。好比,在客服会话聊天中,对于某一些重要的对话(退换货、价保等),咱们会记录这些对象数据,传统的作法是调用一次服务接口,一旦服务出现故障就很容易致使聊天回复速度变慢;而使用备忘录模式则可以记录这些重要的数据信息(用户提供的订单数据),而不须要反复查询接口,这样能提高回复客户的效率

5、缺点

  • 备忘录的生命周期,要主动去管理,释放它们

  • 备忘录的性能,备份太多,势必对性能形成影响

相关文章
相关标签/搜索