侧边栏壁纸
博主头像
人生短短几个秋

行动起来,活在当下

  • 累计撰写 45 篇文章
  • 累计创建 20 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

设计模式-备忘录模式

人生短短几个秋
2025-01-25 / 0 评论 / 0 点赞 / 14 阅读 / 0 字

设计模式 - 备忘录模式(Memento Pattern)

介绍

备忘录模式是一种行为设计模式,它允许你在不破坏封装性的前提下捕获和存储对象的内部状态,以便稍后恢复。这种模式通常用于实现撤销功能,或者在复杂对象的状态需要备份和恢复时使用。

实现

我们以一个简单的文字编辑器为例,来说明如何使用备忘录模式来保存文档的状态,并在需要时恢复。

定义备忘录类

首先定义一个备忘录类,它存储了对象的状态。

class DocumentMemento {
    private String content;

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

    public String getContent() {
        return content;
    }
}

创建发起人(Originator)类

然后创建一个发起人类,它负责创建备忘录并恢复其状态。

class Document {
    private String content;

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

    public void setContent(String content) {
        this.content = content;
    }

    public String getContent() {
        return content;
    }

    public DocumentMemento createMemento() {
        return new DocumentMemento(content);
    }

    public void restoreMemento(DocumentMemento memento) {
        content = memento.getContent();
    }
}

创建管理者(Caretaker)类

创建一个管理者类,它负责保存备忘录对象,通常由客户端来充当这个角色。

class DocumentManager {
    private Stack<DocumentMemento> mementos = new Stack<>();

    public void addMemento(DocumentMemento memento) {
        mementos.push(memento);
    }

    public DocumentMemento getMemento() {
        return mementos.pop();
    }
}

使用备忘录模式

接下来,在主程序中使用备忘录模式来保存文档的状态,并在需要时恢复。

public class TextEditor {
    public static void main(String[] args) {
        Document document = new Document("Initial content.");

        DocumentManager manager = new DocumentManager();

        // 修改文档内容并保存备忘录
        document.setContent("Updated content.");
        manager.addMemento(document.createMemento());
        System.out.println("Current content: " + document.getContent());

        // 再次修改文档内容
        document.setContent("Final content.");
        System.out.println("New content: " + document.getContent());

        // 恢复之前的状态
        document.restoreMemento(manager.getMemento());
        System.out.println("Restored content: " + document.getContent());
    }
}

使用场景

备忘录模式适用于以下情况:

  • 需要保存/恢复数据的相关状态,而不破坏封装性。
  • 需要一个可滚动的历史记录。
  • 需要实现撤销(Undo)功能。

总结

备忘录模式通过将对象的状态保存在一个独立的对象(备忘录)中,使得对象可以在任何时候恢复到某个特定的状态。这种方式不仅保护了对象的内部状态,还支持撤销操作和版本控制等功能。


以上就是备忘录模式的一个实现案例,希望这篇文章能帮助你理解备忘录模式的使用方式及其优势。

0

评论区