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


    前言

    备忘录模式(Memento Pattern)是一种行为型设计模式,它用于捕获和存储对象的内部状态,以便在以后可以恢复到先前的状态。备忘录模式允许对象在不暴露其内部状态的情况下保存和还原状态,从而提供了一种简单的方式来实现撤销和恢复功能。

    在本篇博客中,我们将详细介绍备忘录模式的概念,并提供一个简单的Java代码示例来演示如何实现它。

    一、备忘录模式的概念

    备忘录模式的核心思想是将对象的状态保存在一个备忘录对象中,并将备忘录对象存储在一个外部管理器中,以便随时可以将对象恢复到先前的状态。备忘录模式包含以下几个要素:

    1. 发起人(Originator):负责创建备忘录对象,将自己的状态保存到备忘录中,并从备忘录中恢复状态。

    2. 备忘录(Memento):负责存储发起人的内部状态。备忘录对象通常具有只读接口,只能由发起人访问。

    3. 管理者(Caretaker):负责存储和管理备忘录对象。管理者不应该访问或修改备忘录的内容,只负责存储和提供备忘录对象给发起人。

    二、备忘录模式的实现

    让我们通过一个简单的示例来演示备忘录模式的实现。我们将创建一个文本编辑器应用程序,其中用户可以编辑文本,并且可以随时撤销和恢复编辑操作。

    首先,我们定义备忘录对象 TextEditorMemento,它保存文本编辑器的状态:

    class TextEditorMemento {
        private String text;
    
        public TextEditorMemento(String text) {
            this.text = text;
        }
    
        public String getText() {
            return text;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    然后,我们创建文本编辑器 TextEditor,它包含编辑文本和撤销操作:

    class TextEditor {
        private String text;
    
        public void setText(String text) {
            this.text = text;
        }
    
        public String getText() {
            return text;
        }
    
        public TextEditorMemento save() {
            return new TextEditorMemento(text);
        }
    
        public void restore(TextEditorMemento memento) {
            text = memento.getText();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    接下来,我们编写客户端代码来测试备忘录模式:

    public class MementoPatternDemo {
        public static void main(String[] args) {
            TextEditor textEditor = new TextEditor();
            textEditor.setText("Hello, World!");
    
            // 保存状态
            TextEditorMemento memento = textEditor.save();
    
            // 修改文本
            textEditor.setText("New Text");
    
            // 恢复到先前状态
            textEditor.restore(memento);
    
            System.out.println("Current Text: " + textEditor.getText()); // 输出: Current Text: Hello, World!
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这个示例中,我们创建了一个文本编辑器 TextEditor,它可以保存和恢复状态。客户端可以使用 save 方法保存当前状态,并使用 restore 方法恢复到先前的状态,从而实现了撤销和恢复功能。

    三、备忘录优缺点

    备忘录模式(Memento Pattern)是一种有用的设计模式,但它也有一些明显的优点和缺点。让我们首先讨论一下备忘录模式的优点:

    优点:

    1. 状态保存和恢复:备忘录模式允许对象在不暴露其内部状态的情况下保存和恢复状态。这对于实现撤销、恢复和历史记录等功能非常有用。

    2. 简化发起人:备忘录模式使得发起人(对象需要保存状态的对象)的代码变得更加简洁,因为状态的管理和存储被委托给备忘录对象。

    3. 多状态保存:发起人可以创建多个备忘录对象,从而可以保存多个不同时间点的状态。这使得可以在不同的时间点之间切换状态。

    4. 封装性:备忘录对象封装了状态信息,只有发起人可以访问备忘录的内容,从而保护了状态的完整性和隐私性。

    缺点:

    1. 内存消耗:如果备忘录对象较大或备忘录的数量较多,可能会占用大量内存。需要谨慎管理备忘录的生命周期,确保及时销毁不再需要的备忘录。

    2. 复杂性增加:在某些情况下,引入备忘录模式可能会增加代码的复杂性。特别是在需要频繁保存和恢复状态的情况下,可能会引入额外的复杂性。

    3. 性能开销:备忘录模式涉及创建、保存和恢复状态的操作,可能会引入一定的性能开销。对于性能要求很高的应用程序,需要仔细考虑备忘录的使用。

    4. 不适用于所有情况:备忘录模式主要用于需要保存和恢复对象状态的情况。对于不需要这种功能的情况,引入备忘录模式可能会显得过于繁琐。

    总的来说,备忘录模式是一种有助于实现状态保存和恢复的强大模式,特别适用于需要实现撤销、恢复和历史记录等功能的应用程序。但需要权衡其优点和缺点,并根据具体需求来决定是否使用备忘录模式。在某些情况下,可能有更简单的方法来实现相同的功能。

    总结

    备忘录模式是一种非常有用的设计模式,它允许对象保存和还原状态,从而提供了撤销和恢复功能。这在许多应用程序中都是非常有用的,例如文本编辑器、游戏中的进度保存等。备忘录模式的关键思想是将状态分离和封装在备忘录对象中,以便于管理和恢复。当需要实现撤销和恢复功能时,备忘录模式是一个强大的工具。

  • 相关阅读:
    AWVS+BP+XRAY三层联动扫描漏洞
    温故知新(十一)——IIC
    单商户商城系统功能拆解26—营销中心—限时秒杀
    追梦之旅:中国人民大学加拿大女王大学金融硕士项目,成就你的金融梦想
    (手工)【sqli-labs靶场1-4】GET请求、错误注入、单引号、双引号、括号闭合、字符型、整型
    【Linux】开始使用gdb吧!
    【开源电路】STM32F103VCT6开发板
    java面向对象进阶
    关于el-table+el-input+el-propover的封装
    K8S访问控制------认证(authentication )、授权(authorization )体系
  • 原文地址:https://blog.csdn.net/yanghezheng/article/details/132790419