设计模式简述(十七)备忘录模式

备忘录模式

描述

备忘录模式用于将对象的状态进行保存为备忘录,以便在需要时可以从备忘录会对象状态;其核心点在于备忘录对象及其管理者是独立于原有对象之外的

常用于需要回退、撤销功能的场景。

组件

  • 原有对象(包含自身业务属性 + 创建备忘录 + 从备忘录恢复)
java 复制代码
public class Originator {
    private String state;

    public void setState(String state) {
        this.state = state;
        System.out.println("Setting state to: " + state);
    }

    public String getState() {
        return state;
    }

    public Memento createMemento() {
        return new Memento(state);
    }

    public void recoverFromMemento(Memento memento) {
        state = memento.getState();
    }
}
  • 备忘录对象(包含原对象需要备份、恢复的属性)
java 复制代码
public class Memento {
    private String state;

    public Memento(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }
}
  • 备忘录管理对象
java 复制代码
public class Caretaker {
    private Memento memento;

    public Memento getMemento() {
        return memento;
    }

    public void setMemento(Memento memento) {
        this.memento = memento;
    }
}

使用

java 复制代码
public class Sample {
    public static void main(String[] args) {
        Originator originator = new Originator();
        Caretaker caretaker = new Caretaker();

        originator.setState("State #1");
        // 原对象创建备忘录对象 并交给备忘录管理对象
        caretaker.setMemento(originator.createMemento());

		// 原有对象基于 来自备忘录管理对象的 备忘录对象 进行恢复
        originator.recoverFromMemento(caretaker.getMemento());
        System.out.println("Restored State: " + originator.getState());
    }
}
相关推荐
CPUOS20106 小时前
嵌入式C语言高级编程之MVC设计模式
c语言·设计模式·mvc
张涛酱10745611 小时前
Subagent Orchestration 深入解析:多Agent协作的层级架构
spring·设计模式·ai编程
小江的记录本15 小时前
【系统设计】《2026高频经典系统设计题》(秒杀系统、短链接系统、订单系统、支付系统、IM系统、RAG系统设计)(完整版)
java·后端·python·安全·设计模式·架构·系统架构
楼田莉子16 小时前
同步/异步日志系统:日志器管理器模块\全局接口\性能测试
linux·服务器·开发语言·c++·后端·设计模式
Meya112718 小时前
U位资产管理系统:数据中心“最后一公里“的精细化治理
设计模式·开源·交互
回忆2012初秋1 天前
工厂方法模式完整实现:GPS转换
设计模式·工厂方法模式
胡志辉的博客1 天前
多智能体协作,不是多开几个 Agent:从中介者模式看 OpenClaw 和 Hermes Agent
人工智能·设计模式·ai·agent·中介者模式·openclaw·herman
shark22222221 天前
能懂!基于Springboot的用户增删查改(三层设计模式)
spring boot·后端·设计模式
014-code1 天前
日志规范:怎么写才不算写废话
java·开发语言·设计模式·日志
楼田莉子2 天前
同步/异步日志系统:日志落地模块\日志器模块\异步日志模块
linux·服务器·c++·学习·设计模式