首页 > 编程语言 >java实现备忘录模式

java实现备忘录模式

时间:2023-09-30 21:06:39浏览次数:28  
标签:状态 java 模式 备忘录 state 原发 public Memento


备忘录模式是一种行为设计模式,它允许您捕获一个对象的内部状态,并在稍后的时间点将其恢复。这对于需要撤销操作或恢复到先前状态的应用程序非常有用。以下是在 Java 中实现备忘录模式的一般步骤:

  1. 创建一个原发器类(Originator):这是需要保存状态的类。它包含了要保存和恢复的状态信息。
  2. 创建一个备忘录类(Memento):这个类保存原发器的状态信息,并且只能由原发器本身访问。
  3. 创建一个负责人类(Caretaker):这个类负责保存备忘录对象,以便稍后可以恢复状态。

现在,让我们通过一个示例来实现备忘录模式:

// 步骤 1: 创建原发器类
class Originator {
    private String state;

    public void setState(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }

    public Memento saveToMemento() {
        return new Memento(state);
    }

    public void restoreFromMemento(Memento memento) {
        state = memento.getState();
    }
}

// 步骤 2: 创建备忘录类
class Memento {
    private final String state;

    public Memento(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }
}

// 步骤 3: 创建负责人类
class Caretaker {
    private Memento memento;

    public void saveMemento(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("状态1");
        caretaker.saveMemento(originator.saveToMemento());
        
        // 修改原发器的状态
        originator.setState("状态2");
        
        // 恢复原发器到先前状态
        originator.restoreFromMemento(caretaker.getMemento());
        
        // 输出原发器的当前状态
        System.out.println("当前状态: " + originator.getState()); // 输出 "当前状态: 状态1"
    }
}

在这个示例中,原发器(Originator)类保存了一个状态,可以通过 saveToMemento 方法保存状态到备忘录(Memento)对象,然后通过 restoreFromMemento 方法从备忘录对象中恢复状态。负责人(Caretaker)类负责管理备忘录对象,保存和恢复原发器的状态。

备忘录模式可以用于保存对象的状态历史,以便在需要时回滚到之前的状态。这在实现撤销、恢复或历史记录功能时非常有用。


标签:状态,java,模式,备忘录,state,原发,public,Memento
From: https://blog.51cto.com/u_13171517/7664953

相关文章

  • java 实现命令行模式
    命令模式是一种行为设计模式,它允许您将请求封装为对象,以便您可以将其参数化、队列化、记录和撤销。在Java中实现命令模式涉及创建一个命令接口,具体命令类,以及一个接收者类,该接收者类执行实际操作。下面是一个简单的Java命令模式示例:首先,创建一个命令接口(Command):publicinterfac......
  • java 实现责任链模式
    责任链模式(ChainofResponsibilityPattern)是一种行为型设计模式,它允许你将请求沿着处理链传递,每个处理器(处理者)都有机会处理请求,直到请求被处理或到达处理链的末端。责任链模式通常包括以下角色:抽象处理者(Handler)、具体处理者(ConcreteHandler)、客户端(Client)。以下是一个简单的Ja......
  • 无涯教程-JavaScript - SUBSTITUTE函数
    描述在文本字符串中用new_text替换old_text。语法SUBSTITUTE(text,old_text,new_text,[instance_num])争论Argument描述Required/OptionalTextThetextorthereferencetoacellcontainingtextforwhichyouwanttosubstitutecharacters.RequiredOld_t......
  • 保护模式下的存储管理
    分段段描述符32位模式下,\(2^{32}bits=4GB\),起始地址用\(32bits\)表示,偏移用\(20bits\)表示,一页大小是\(4KB\),\(2^{20}\times2^{12}=2^{32}\),表示内存空间的某个位置最少用\(52bits\),实际上用\(64bits\),段基地址32位+限长20位+访问权限8位+属性4位。P:存在位:=1表示装入内存,=0......
  • Android中OkHttp源码阅读二(责任链模式)
    AndroidOkHttp源码阅读详解一看OkHttp源码,发现OkHttp里面使用了责任链设计模式,所以才要学习责任链设计模式小节2最终会返回ResponseResponsegetResponseWithInterceptorChain()throwsIOException{//Buildafullstackofinterceptors.List<Interceptor>inte......
  • 软件设计模式系列之二十——备忘录模式
    备忘录模式是一种行为型设计模式,它允许我们在不暴露对象内部细节的情况下捕获和恢复对象的内部状态。这个模式非常有用,因为它可以帮助我们实现撤销、恢复和历史记录等功能。在本文中,我们将深入探讨备忘录模式的各个方面,包括定义、示例、结构、实现步骤、代码实现、典型应用场景、......
  • Java语言通过三种方法来实现队列
    队列关于作者作者介绍......
  • 无涯教程-JavaScript - RIGHT函数
    描述RIGHT函数根据您指定的字符数返回文本字符串中的最后一个或多个字符。RIGHTB根据您指定的字节数返回文本字符串中的最后一个或多个字符。RIGHT适用于使用单字节字符集(SBCS)的语言,而RIGHTB适用于使用双字节字符集(DBCS)的语言。您计算机上的默认语言设置会影响返回值,如......
  • java: 用百度API读取增值税发票信息
     /***encoding:utf-8*版权所有2023涂聚文有限公司*许可信息查看:https://github.com/Baidu-AIP/java-sdk/blob/master/src/main/java/com/baidu/aip/http/AipRequest.java*描述:*#Author:geovindu,GeovinDu涂聚文.*#IDE:IntelliJIDEA202......
  • Ftp基础(二):被动模式与主动模式
      Ftp即文件传输协议,说白了就是处理文件操作的。可能你还听说过Ftps、SFtp,简单说一下他们的区别吧Ftps:可以理解为Ftp+Ssl,Ftp与Ftps的关系就类似Http和Https的关系SFtp:可以理解为Ftp+SSH  总之,可以理解为Ftp就是明文传输,Ftps、SFtp采用了加密传输。    好了......