💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 备忘录模式 Memento,在不破坏对象封装性的前提下在对象外保存对象的某个状态,以便在需要的时候将该对象恢复到该状态。备忘录模式可以用在需要保存或者恢复数据的相关状态场景下,或者提供一个回滚操作(数据库事务)。 ## 组件 1. Memento:包含了要被恢复的对象的状态。 2. Originator:将状态存储进Memento中。 3. Caretaker:负责从 Memento 中恢复对象的状态。 :-: ![](https://img.kancloud.cn/6b/83/6b83ec1a09bceeb34010fde4e864987a_560x360.png) ## 实现 1. 创建Memento类 ~~~  package net.smrobot.menento;  ​  /**   * 备忘录模式   * 备忘录类:包含要恢复的对象的状态   */  ​  public class Memento {      private String state;            public Memento(String state) {          this.state = state;     }            public String getState() {          return state;     }  }  ​ ~~~ 2. 创建Originator类 ~~~  package net.smrobot.menento;  ​  /**   * 源对象   * 在Memento对象中存储状态   */  public class Originator {  ​      private String state;  ​      public String getState() {          return this.state;     }  ​      public void setState(String state) {          this.state = state;     }  ​      /**       * 将状态存储到Memento中       * @param state       * @return       */      public Memento saveStateToMemento(String state) {          return new Memento(state);     }  ​      /**       * 从Memento中获取状态       * @param memento       */      public void getStateFromMemento(Memento memento) {          this.state = memento.getState();     }  ​  }  ​ ~~~ 3. 创建Caretaker类 ~~~  package net.smrobot.menento;  ​  import java.util.ArrayList;  import java.util.List;  ​  /**   * 负责从Memento中恢复对象的状态   */  public class Caretaker {  ​      private List<Memento> mementoList = new ArrayList<>();  ​      public void add(Memento memento) {          mementoList.add(memento);     }  ​      public Memento get(int index) {          if (index < 0 || index >= mementoList.size()) {              return null;         }          return mementoList.get(index);     }  ​  }  ​ ~~~ 备忘录模式其实就是在要保存状态的对象中添加两个方法用户将状态保留进备忘录中或者从备忘录中获取状态。然后将所有的备忘录添加到一个容器进行维护。