美文网首页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