• Java设计模式之备忘录模式


    备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,以便在日后恢复对象到这个状态。

    备忘录模式通常由三个主要角色组成:

    1. 发起人(Originator):负责创建一个备忘录,并记录当前对象的内部状态。
    2. 备忘录(Memento):用于存储发起人对象的内部状态。备忘录可以包含发起人的部分或全部状态信息。
    3. 管理者(Caretaker):负责保存备忘录对象,并在需要时将其返回给发起人。

    下面是一个简单的示例,说明如何使用备忘录模式来实现撤销操作:

    // 发起人类
    class Originator {
        private String state;
    
        public void setState(String state) {
            this.state = state;
        }
    
        public String getState() {
            return state;
        }
    
        public Memento createMemento() {
            return new Memento(state);
        }
    
        public void restoreMemento(Memento memento) {
            state = memento.getState();
        }
    }
    
    // 备忘录类
    class Memento {
        private String state;
    
        public Memento(String state) {
            this.state = state;
        }
    
        public String getState() {
            return state;
        }
    }
    
    // 管理者类
    class Caretaker {
        private Memento memento;
    
        public void setMemento(Memento memento) {
            this.memento = memento;
        }
    
        public Memento getMemento() {
            return memento;
        }
    }
    
    // 示例代码
    public class Main {
        public static void main(String[] args) {
            Originator originator = new Originator();
            Caretaker caretaker = new Caretaker();
    
            // 设置初始状态
            originator.setState("State 1");
            System.out.println("初始状态:" + originator.getState());
    
            // 保存状态
            caretaker.setMemento(originator.createMemento());
    
            // 修改状态
            originator.setState("State 2");
            System.out.println("修改后的状态:" + originator.getState());
    
            // 恢复状态
            originator.restoreMemento(caretaker.getMemento());
            System.out.println("恢复后的状态:" + originator.getState());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69

    在上述示例中,Originator 类表示发起人,它负责创建备忘录并记录当前状态。Memento 类表示备忘录,它用于存储 Originator 的状态。Caretaker 类表示管理者,它保存备忘录对象并在需要时将其返回给 Originator。

    在示例中,我们首先设置 Originator 的初始状态为 “State 1”,然后保存该状态的备忘录。接着,我们修改 Originator 的状态为 “State 2”,但后来又通过恢复备忘录将其状态还原为 “State 1”。

    备忘录模式的优点是可以实现对象状态的保存和恢复,使得对象的状态变化对客户端透明。它可以在不破坏封装性的情况下实现状态的保存和恢复,提供了一种可靠的撤销操作的实现方式。

  • 相关阅读:
    K8S:K8S对外服务之Ingress
    【12月海口】2022年第六届船舶,海洋与海事工程国际会议(NAOME 2022)
    北大肖臻老师《区块链技术与应用》系列课程学习笔记[7]比特币-分叉
    web3 React Dapp书写订单 买入/取消操作
    从零开始的Socket编程 零
    图像智能处理黑科技,让图像处理信手拈来
    49张图带领小伙伴们体验一把 Flowable-UI
    Java开发 - 让你少走弯路的Redis集群搭建
    Metasploit入门用法
    小程序中Java后台调用getAccessToken接口、msg_sec_check接口检测文本安全、小程序前端访问后端接口的方法
  • 原文地址:https://blog.csdn.net/kkwyting/article/details/133763044