Java基础教程(223)行为型模式之备忘录:时光回溯的魔法:深度解析Java备忘录模式

备忘录模式(Memento Pattern)的核心在于状态保存与恢复,它允许我们在不破坏封装性的前提下,捕获并外部化对象的内部状态。

模式结构与核心角色

  • Originator(原发器):需要保存状态的对象
  • Memento(备忘录):存储Originator内部状态的对象
  • Caretaker(管理者):负责保存和管理备忘录对象

实战示例:文本编辑器撤销功能

// 备忘录类
class EditorMemento {
    private final String content;

    public EditorMemento(String content) {
        this.content = content;
    }

    public String getContent() {
        return content;
    }
}

// 原发器类
class TextEditor {
    private String content;
    
    public void type(String words) {
        content += words;
    }
    
    public EditorMemento save() {
        return new EditorMemento(content);
    }
    
    public void restore(EditorMemento memento) {
        content = memento.getContent();
    }
    
    public String getContent() {
        return content;
    }
}

// 管理者类
class History {
    private Stack<EditorMemento> mementos = new Stack<>();
    
    public void push(EditorMemento memento) {
        mementos.push(memento);
    }
    
    public EditorMemento pop() {
        return mementos.pop();
    }
}

// 使用示例
public class Demo {
    public static void main(String[] args) {
        TextEditor editor = new TextEditor();
        History history = new History();
        
        editor.type("Hello ");
        history.push(editor.save());
        
        editor.type("World");
        history.push(editor.save());
        
        editor.type("!"); // 当前内容: "Hello World!"
        
        editor.restore(history.pop()); // 撤销到"Hello World"
        editor.restore(history.pop()); // 撤销到"Hello "
    }
}

应用场景与优势

备忘录模式特别适用于:

  1. 撤销/重做功能:如文本编辑器、图形绘图工具
  2. 事务回滚:数据库操作中的状态恢复
  3. 游戏存档:保存和恢复游戏进度
  4. 快照管理:系统状态的历史记录

优势:

  • 保持对象封装边界,不暴露实现细节
  • 简化原发器职责,状态管理由Caretaker处理
  • 提供易于实现的状态恢复机制

注意事项:

  • 频繁保存状态可能导致内存占用增加
  • 需要权衡保存状态的数量和频率

备忘录模式通过将状态保存和恢复的职责分离,为我们提供了一种优雅的"后悔药"机制,是构建用户友好应用程序的重要工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值