• 设计模式-行为型模式-备忘录模式


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

     

    1. //首先,我们定义Originator类,它有一个状态和一个方法来创建和恢复备忘录:
    2. public class Originator {
    3. private String state;
    4. public void setState(String state) {
    5. this.state = state;
    6. }
    7. public String getState() {
    8. return state;
    9. }
    10. // 创建备忘录
    11. public Memento createMemento() {
    12. return new Memento(this.state);
    13. }
    14. // 恢复备忘录状态
    15. public void restoreMemento(Memento memento) {
    16. this.state = memento.getState();
    17. }
    18. }
    19. //接下来,我们定义Memento类,它负责存储Originator的状态:
    20. public class Memento {
    21. private String state;
    22. // 构造器,用于从Originator获取状态信息
    23. public Memento(String state) {
    24. this.state = state;
    25. }
    26. // 获取备忘录中的状态信息
    27. public String getState() {
    28. return state;
    29. }
    30. }
    31. //然后,我们定义Caretaker类,它负责管理Memento对象:
    32. public class Caretaker {
    33. private Memento memento;
    34. // 保存备忘录
    35. public void setMemento(Memento memento) {
    36. this.memento = memento;
    37. }
    38. // 获取备忘录
    39. public Memento getMemento() {
    40. return memento;
    41. }
    42. }
    43. //最后,我们编写一个简单的客户端代码来演示如何使用这些类:
    44. public class MementoPatternDemo {
    45. public static void main(String[] args) {
    46. // 创建Originator对象
    47. Originator originator = new Originator();
    48. // 创建Caretaker对象
    49. Caretaker caretaker = new Caretaker();
    50. // 设置Originator的初始状态
    51. originator.setState("State A");
    52. System.out.println("Originator state: " + originator.getState());
    53. // 创建备忘录并保存
    54. caretaker.setMemento(originator.createMemento());
    55. // 改变Originator的状态
    56. originator.setState("State B");
    57. System.out.println("Originator state: " + originator.getState());
    58. // 从Caretaker恢复备忘录
    59. originator.restoreMemento(caretaker.getMemento());
    60. System.out.println("Originator state after restoring memento: " + originator.getState());
    61. }
    62. }

  • 相关阅读:
    【好诗选读】新春诗会作品合集|黄晓平 蒋德明 徐书遐|刘红立 孟萌 刘东宏
    开源创新框架MoA,可极大增强大模型的能力
    jvm server和client模式切换
    前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第四章 认识项目目录
    BitBake使用攻略--BitBake的语法知识二
    C语言——问题总结
    Java自定义注解如何实现
    树莓派4B(64位)环境搭建
    sql中如何实现递归
    finalshell上传文件失败的解决方法
  • 原文地址:https://blog.csdn.net/qq_34690079/article/details/136585629