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


    备忘录(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. }

  • 相关阅读:
    Linux(CentOS7)下载并安装Python 3教程及创建虚拟环境
    百度网盘开启画中画教程介绍
    加缪——人生到底有什么意义?生命的意义就是生命本身
    MySQL:日志系统介绍 | 错误日志 | 查询日志 | 二进制日志:bin-log数据恢复实践 | 慢日志查询
    C++算法:柱状图中最大的矩形
    Vue案例入门 列表展示 计数器
    接口自动化测试框架详解
    数组扁平化的方法
    java参数传值
    Flask--登录页面应用案例
  • 原文地址:https://blog.csdn.net/qq_34690079/article/details/136585629