美文网首页java设计模式笔记
设计模式二十--备忘录模式

设计模式二十--备忘录模式

作者: 朽木亦自雕 | 来源:发表于2019-04-03 13:47 被阅读0次

定义

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

备忘录模式的角色

1:发起人角色(Originator)该角色记录当前对象的内部状态。负责定义哪些属于备份范围内的状态,负责创建 和恢复备忘数据。

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

2:备忘录角色(Memento)
该角色负责存储发起人角色的内部状态,在需要时提供发起人需要的内部状态数据。

public class Memento{
  private String state;
 
  public Memento(String state){
    this.state = state;
  }
  public String getState(){
    return this.state;
  }
  public void setState(String state){
    this.state = state;
  }
 
}

3:负责人(Caretaker)
该角色对备忘录进行管理,保存和提供备忘录。

public class Caretaker{
  private Memento m;
  public Memento getMemento{
     return this.m;
  }
  public void setMemento(Memento m){
    this.m = m;
  }
}

客户端代码:

public class Client{
  Originator org = new Originator();
  Caretaker care = new Caretaker();
  //创建一个备忘录
  Memento  memento = care.setMemento(org.createMemento());
  //恢复一个备忘录
  org.restore(care.getMemento());
}

注意事项

1:备忘录的生命周期,应该在最近的代码中使用,要主动管理生命周期。
2:备忘录的性能,不能再循环中频繁创建备忘录,负责会提升系统开销。

使用场景

1:需要保存和恢复数据的状态。
2:提供一个可回滚的操作。
3:需要监控副本的场景。
4:数据库连接的事务管理模式就是备忘录模式

参考资料:设计模式(java)

相关文章

网友评论

    本文标题:设计模式二十--备忘录模式

    本文链接:https://www.haomeiwen.com/subject/qttclqtx.html