设计模式-备忘录模式

设计模式-备忘录模式

备忘录模式(Memento Pattern)是计算机科学中的一种行为设计模式。它提供了一种在不破坏封装性的前提下,捕获和恢复对象内部状态的方法。这种模式主要用于在用户需要回滚到对象的某个先前状态时,能够实现状态的还原。

在备忘录模式中,主要涉及到三个角色:

  1. Originator(原发器):这是需要保存其内部状态的对象。它负责创建和恢复备忘录数据,同时也可以根据需要改变自己的状态。
  2. Memento(备忘录):备忘录对象存储了原发器对象的内部状态。它的接口通常只允许原发器对象读取备忘录保存的状态,而对其他对象则隐藏这些状态细节,以保护原发器对象的封装性。
  3. Caretaker(管理者):负责保存和管理备忘录对象,但不能访问或操作备忘录所保存的具体状态信息。当需要恢复原发器对象的先前状态时,管理者将合适的备忘录对象传递给原发器。

代码结构图

在这里插入图片描述

/**
 * 发起人
 */
public class Originator {
   
    /** 状态 */
    private String state;

    /** 输出方法 */
    public void show(){
   
        System.out.println("当前状态是:" + this.state);
    }

    /** 恢复备忘录 */
    public void recoveryMemento(Memento memento){
   
        this.state = memento.getState();
    }

    /** 创建备忘录 */
    public Memento createMemento(){
   
        return new Memento(this.state);
    }


    public void setState(String state) {
   
        this.state = state;
    }
    public String getState() {
   
        return state;
    }
}
/**
 * 备忘录
 */
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 MemoDemo {
   
    public static void main(String[] args) {
   
        // 创建发起者 赋值状态属性
        Originator originator = new Originator();
        originator.setState("状态-良好");
        originator.show();

        // 创建管理者
        Caretaker caretaker = new Caretaker();
        // 管理者-创建备忘录
        caretaker.setMemento(originator.createMemento());

        // 发起者修改状态
        originator.setState("状态-很困");
        originator.show();

        // 管理者-恢复状态
        originator.recoveryMemento(caretaker.getMemento());
        originator.show();
    }
}

打印结果:

Connected to the target VM, address: '127.0.0.1:43988', transport: 'socket'
当前状态是:状态-良好
当前状态是:状态-很困
当前状态是:状态-良好
Disconnected from the target VM, address: '127.0.0.1:43988', transport: 'socket'

相关推荐

  1. 设计模式-备忘录模式

    2024-01-24 05:26:01       55 阅读
  2. 设计模式——备忘录模式

    2024-01-24 05:26:01       55 阅读
  3. 设计模式备忘录模式

    2024-01-24 05:26:01       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-24 05:26:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-24 05:26:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-24 05:26:01       82 阅读
  4. Python语言-面向对象

    2024-01-24 05:26:01       91 阅读

热门阅读

  1. 自然语言处理的发展

    2024-01-24 05:26:01       59 阅读
  2. 算法题学习笔记-哈希

    2024-01-24 05:26:01       44 阅读
  3. 第八章 对象、类与面向对象编程(上)

    2024-01-24 05:26:01       52 阅读
  4. 计算机网络(第六版)复习提纲8

    2024-01-24 05:26:01       55 阅读
  5. 从0开始学习C++ 第二十课:模板与泛型编程

    2024-01-24 05:26:01       68 阅读
  6. Vue.js代码检查

    2024-01-24 05:26:01       55 阅读
  7. gitlab上传代码到仓库

    2024-01-24 05:26:01       58 阅读
  8. 嵌入式 从入门到精通 第七天

    2024-01-24 05:26:01       60 阅读
  9. Python程序打包成exe可执行文件说明

    2024-01-24 05:26:01       49 阅读
  10. 使用Flink的所有pom文件

    2024-01-24 05:26:01       48 阅读
  11. 设计一个Call Center

    2024-01-24 05:26:01       57 阅读
  12. img.shape[2 : ] img.shape[0]、[1]、[2]到底代表什么

    2024-01-24 05:26:01       66 阅读
  13. 将html字符串中的base64图片转换成file并上传

    2024-01-24 05:26:01       58 阅读