Java设计模式——备忘录模式

Java设计模式之备忘录模式

备忘录模式:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。

遵循了的单一责任原则,关键对象不负责保存状态,由备忘录负责保存

角色:

  • 发起人:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。
  • 备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。
  • 管理角色:对备忘录进行管理,保存和提供备忘录。

使用

  • Originator 发起者 负责状态的设置 当需要时恢复状态
public class Originator {
    private String state;
    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }
    public Memento saveStateToMemento(){
        return new Memento(state);
    }
    public void restoreStateFromMemento(Memento memento){
        setState(memento.getState());
    }
}
  • Memento 备忘录 保存维护状态的对象
/**
 * 备忘录对象 主要负责保存维护状态
 */
public class Memento {
    private String state;
    public Memento(String state) {
        this.state = state;
    }
    public String getState() {
        return state;
    }
}
  • CareTaker 状态维护者
/**
 * 负责人,负责保存所有备忘录
 */
public class CareTaker {
    private List<Memento> list;
    public CareTaker(){
        list = new ArrayList<>();
    }
    //添加备忘录
    public void add(Memento memento){
        list.add(memento);
    }
    //获得备忘录,从中可以获得状态
    public Memento get(int i){
        return list.get(i);
    }
}
  • 测试
public class ClientTest {
    public static void main(String[] args) {
        CareTaker careTaker = new CareTaker();
        Originator originator = new Originator();
        originator.setState("状态1");
        careTaker.add(originator.saveStateToMemento());
        originator.setState("状态2");
        careTaker.add(originator.saveStateToMemento());
        originator.setState("状态3");
        careTaker.add(originator.saveStateToMemento());
        System.out.println("当前状态:"+originator.getState());
        //恢复到1状态
        System.out.println("我想要恢复到状态1");
        originator.restoreStateFromMemento(careTaker.get(0));
        System.out.println("当前状态:"+originator.getState());
    }
}

输出:
当前状态:状态3
我想要恢复到状态1
当前状态:状态1

事务回滚可使用备忘录模式

备忘录模式优点:

  • 提供了恢复状态的功能
  • 保持关键对象的封装

缺点:

  • 状态需要存储到备忘录对象是消耗资源的

代码地址:Github备忘录模式


Java设计模式|策略模式

Java设计模式|观察者模式

Java设计模式|装饰者模式

Java设计模式|工厂模式

Java设计模式|命令模式

Java设计模式|适配器模式和外观模式

Java设计模式|模板方法模式

Java设计模式|迭代器模式和组合模式

Java设计模式|状态模式

Java设计模式|代理模式

Java设计模式|单例模式

Java设计模式|备忘录模式

Java设计模式|访问者模式

Java设计模式|复合模式

Java设计模式|桥接模式

Java设计模式|生成器模式

Java设计模式|享元模式/蝇量模式

Java设计模式|原型模式

Java设计模式|责任链模式

Java设计模式|中介者模式

  • 本文作者: dzou | 微信:17856530567
  • 本文链接: http://www.dzou.top/post/7f2dd2e8.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
  • 并保留本声明和上方二维码。感谢您的阅读和支持!