小工具知识网

当前位置: 首页 > 行业知识 > 设计模式之备忘录模式

行业知识

设计模式之备忘录模式

2026-11-07 17:12:09 来源:互联网转载

备忘录模式(Memento)

定义

在不index.php/tags-41973.html" >���坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

使用场景

主要角色

  1. 发起人 Originator 需要备份的对象
  2. 看管人 Caretaker 保存备份的容器
  3. 备忘录 Memento 备份对象

类图

示例代码

需要备份的对象

public class Originator {    private String state1;    private String state2;    private String staten;    void setState1(String state1) {        this.state1 = state1;    }    String getState1() {        return state1;    }    // 创建备忘录    Memento createMemento() {        Memento memento = new Memento();        memento.setState1(state1);        memento.setStaten(staten);        return memento;    }    // 恢复状态    void restoreMemento(Memento memento) {        this.state1 = memento.getState1();        this.staten = memento.getStaten();    }}

备份对象

@Datapublic class Memento {    private String state1;    private String staten;}

看管人:负责管理备份

public class Caretaker {    private final Map history = new HashMap();    // 保存备忘录    public void saveMemento(String name,Memento memento) {        history.put(name,memento);    }    // 获取备忘录    public Memento getMemento(String name) {        return history.get(name);    }    public Memento removeMemento(String name) {        return history.remove(name);    }}
public class Client {    public static void main(String[] args) {        // 创建发起人        Originator originator = new Originator();        // 创建负责人        Caretaker caretaker = new Caretaker();        // 设置发起人的状态        originator.setState1("State 1");        System.out.println("Current State: " + originator.getState1());        // 保存状态        caretaker.saveMemento("第一次备份", originator.createMemento());        // 修改发起人的状态        originator.setState1("State 2");        System.out.println("Updated State: " + originator.getState1());        // 恢复状态        originator.restoreMemento(caretaker.getMemento("第一次备份"));        System.out.println("Restored State: " + originator.getState1());    }}
Current State: State 1Updated State: State 2Restored State: State 1

备忘录模式与命令模式对比

  1. 两者都能实现回退与撤销操作
  2. 命令模式是通过反向命令实现的,只能逐步回退或撤销,备忘录模式生产生产当前对象的快照,可以恢复到任意备份点

工作中遇到场景

上一篇:Keke下载秘籍,一键获取所需内容,轻松上手!

下一篇:apn怎么接入代理服务器?