魔术桌
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • DesignPattern - 备忘录模式

文章摘要: 备忘录模式使用总结。

简介

简要说明

  • 备忘录模式(Memento Pattern)是一种行为型设计模式。
  • 通过引入一个备忘录对象来捕获并保存一个对象的内部状态,在未来需要时可以恢复到这个状态。

主要功能

  • 保存一个对象在某一个时刻的状态,以便在需要时恢复。
  • 防止直接访问对象的状态,保持封装性。

注意事项

  • 备忘录模式可能会消耗大量资源,尤其是状态较多或者状态数据较大时。
  • 确保备忘录对象对发起人对象之外的任何对象都是不可变的,以避免备忘录状态被意外修改。

适用场景

  • 当需要保存一个对象的状态快照,并在之后恢复它时。
  • 当需要保护对象的完整性时,但又不希望暴露其内部细节。

Java 8

案例

// 发起人角色,拥有需要保存的状态
class Originator {
    private String state;

    // 设置状态
    public void setState(String state) {
        this.state = state;
    }

    // 获取状态
    public String getState() {
        return state;
    }

    // 创建备忘录,将当前状态保存到备忘录对象中
    public Memento saveStateToMemento() {
        return new Memento(state);
    }

    // 从备忘录对象恢复状态
    public void getStateFromMemento(Memento memento) {
        state = memento.getState();
    }
}

// 备忘录角色,用于存储发起人的内部状态
class Memento {
    private final String state;

    // 构造函数,保存状态
    public Memento(String state) {
        this.state = state;
    }

    // 获取保存的状态
    public String getState() {
        return state;
    }
}

// 管理角色,负责保存和提供备忘录对象
class CareTaker {
    private List<Memento> mementoList = new ArrayList<>();

    // 添加备忘录到列表
    public void add(Memento state) {
        mementoList.add(state);
    }

    // 获取指定索引的备忘录
    public Memento get(int index) {
        return mementoList.get(index);
    }
}

// 客户端代码
public class MementoPatternDemo {
    public static void main(String[] args) {
        // 创建发起人对象
        Originator originator = new Originator();
        // 创建备忘录管理对象
        CareTaker careTaker = new CareTaker();

        // 设置发起人初始状态
        originator.setState("State #1");
        // 打印当前状态
        System.out.println("Current State: " + originator.getState());
        // 保存状态到备忘录
        careTaker.add(originator.saveStateToMemento());

        // 改变状态
        originator.setState("State #2");
        // 打印当前状态
        System.out.println("Current State: " + originator.getState());
        // 保存状态到备忘录
        careTaker.add(originator.saveStateToMemento());

        // 恢复到备忘录的第一个状态
        originator.getStateFromMemento(careTaker.get(0));
        // 打印恢复后的状态
        System.out.println("First saved State: " + originator.getState());
    }
}

注释

  • 在这个例子中,Originator类是具有内部状态的类,它提供了方法来保存和恢复状态。
  • Memento类是备忘录类,它存储了Originator对象的状态。通常,备忘录类会有一个私有构造函数和一个获取状态的方法,以确保其不可变性。
  • CareTaker类是负责管理备忘录的类,它可以保存多个备忘录对象,并提供方法来获取它们。
  • 在客户端代码MementoPatternDemo中,我们创建了一个Originator对象和一个CareTaker对象。我们修改了Originator对象的状态,并使用CareTaker对象来保存状态快照。之后,我们通过CareTaker对象恢复到之前保存的状态。这个过程演示了如何使用备忘录模式来保存和恢复对象的状态。
更新时间: 2025/10/3 17:56