实验 20:备忘录模式

news/2024/12/25 14:51:24/文章来源:https://www.cnblogs.com/yuanxinglan/p/18556063

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 

1、理解备忘录模式的动机,掌握该模式的结构;

2、能够利用备忘录模式解决实际问题。

 

[实验任务一]:多次撤销

改进课堂上的用户信息操作撤销实例,使得系统可以实现多次撤销(可以使用HashMapArrayList等集合数据结构实现)。

实验要求:

1. 画出对应的类图;

2. 提交源代码;

3. 注意编程规范。

1、类图

 

1、源代码

package org.example;

import java.util.ArrayList;
import java.util.List;
 
public class Caretaker {
    private List<Memo> list = new ArrayList<>();
 
    public void setMemo(Memo m){
        list.add(m);
    }
 
    public Memo getMemo(){
        Memo m = list.get( list.size() - 2 );
        list.remove( list.size() - 2 );
        return m;
    }
}

package org.example;

public class Client {
    public static void main(String[] args) {
        User user = new User();
        Caretaker caretaker = new Caretaker();
 
        user.setId("20223794");
        user.setPassword("123456");
        caretaker.setMemo(user.saveState());
        System.out.println("状态一");
        user.show();
        System.out.println("************************************************************");
 
        user.setId("20223794");
        user.setPassword("dadvgfb");
        caretaker.setMemo(user.saveState());
        System.out.println("状态二");
        user.show();
        System.out.println("************************************************************");
 
        user.setId("20223794");
        user.setPassword("safdvfv");
        caretaker.setMemo(user.saveState());
        System.out.println("状态三");
        user.show();
        System.out.println("************************************************************");
 
        System.out.println("逐步撤销操作:");
        System.out.println("恢复到状态二");
        user.restoreState(caretaker.getMemo());
        user.show();
        System.out.println("************************************************************");
 
        System.out.println("恢复到状态一");
        user.restoreState(caretaker.getMemo());
        user.show();
    }
}

package org.example;

public class Memo {
    private String id;
    private String password;
 
    public Memo(String id, String password) {
        this.id = id;
        this.password = password;
    }
 
    public String getId() {
        return id;
    }
 
    public void setId(String id) {
        this.id = id;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
}

package org.example;

public class User {
    private String id;
    private String password;
 
    public String getId() {
        return id;
    }
 
    public void setId(String id) {
        this.id = id;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    public Memo saveState(){
        return new Memo(id,password);
    }
 
    public void restoreState(Memo m){
        this.id = m.getId();
        this.password = m.getPassword();
    }
 
    public void show(){
        System.out.println("id:" + this.id);
        System.out.println("password:" + this.password);
    }
}

 

2、运行截图

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/837202.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实验 21:观察者模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解观察者模式的动机,掌握该模式的结构; 2、能够利用观察者模式解决实际问题。[实验任务一]:股票提醒 当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下…

MaskLLM:英伟达出品,用于大模型的可学习`N:M`稀疏化 | NeurIPS24

来源:晓飞的算法工程笔记 公众号,转载请注明出处论文: MaskLLM: Learnable Semi-Structured Sparsity for Large Language Models论文地址:https://arxiv.org/abs/2409.17481 论文代码:https://github.com/NVlabs/MaskLLM创新性提出一种可学习的LLM半结构化剪枝方法MaskLLM…

Codeforces 1145 题目分析

本文将分析 Codeforces 1145 (April Fools Day Contest 2019)。 题目分析 A 题目描述:使用“灭霸排序”算法可以得到的最长子串的长度。 解法:暴力。 B 题目描述:输入一个整数 \(\in [1,99]\),若它的英文形式含有 knba 四个字母输出 NO 否则输出 YES。 解法:打表。 C 题目…

3.2点对点ppp

001ppp协议特点 ppp协议能承载不同网络层分组,ip数据报里有其他网络层协议存在。 能在多种类型的链路上运行 和广播方式相比,需要一个网络地址的协商,传送前有个协商过程,确认资源。地址002ppp协议组成 将ip数据报封装到串行链路的方法 链路控制协议LCP--建立链路,身份验证…

.net8报HTTP Error 500.30 - ASP.NET Core app failed to start

.net8调试正常,发布到IIS报HTTP Error 500.30 - ASP.NET Core app failed to start。 解决办法: 停止IIS站点,运行发布项目的“XXX.exe”,在运行窗口就可以看到具体的错误信息。 在根据具体错误信息解决。

设计和训练人工智能模型的意义是什么?

前一篇:《人工智能模型训练技术,正则化!》 序言:人工智能模型的真正价值在于其实际应用,而不仅仅停留在理论阶段。本节将通过一个简单而常见的应用场景,展示如何将前面几节所设计和训练的模型应用于实际问题。我们将使用训练好的模型对句子进行分类,具体来说,识别社交平…

【分享】数据传输新挑战:内外网文件如何实现安全高效摆渡?

随着信息化的不断深入,越来越多的数据被电子化,这使得数据安全问题变得更加突出。全球42%的企业在过去一年中至少经历过一次数据泄露事故,30%的企业IT人员在数据泄露事故中被开除,50%的企业IT认为文件管控难度大、成本高。 为了保护核心数据,大部分企业都实施了内外网隔离…

画图-利用画图工具修改聊天记录时间

1、用Windows自带的画图工具 打开要修改的图片 选择“矩形”用矩形选中要修改的时间即可对其进行 移动 或者覆盖的操作

Redis中常见的数据类型及其应用场景

五种常见数据类型 Redis中的数据类型指的是 value存储的数据类型,key都是以String类型存储的,value根据场景需要,可以以String、List等类型进行存储。各数据类型介绍:Redis数据类型对应的底层数据结构String 类型的应用场景 常用命令存放键值:set key value [EX seconds] …

dotnet 9 WPF 项目禁用 IncludePackageReferencesDuringMarkupCompilation 导致源代码包 XAML 构建失败

本文记录在 dotnet 6 时通过禁用 IncludePackageReferencesDuringMarkupCompilation 解决源代码冲突问题时,在 dotnet 9 将因此导致 XAML 构建生成的 g.cs 文件包含的 XAML 只记录相对文件路径,从而导致构建不通过在 WPF 修复 dotnet 6 与源代码包冲突 这篇博客里面和大家介绍…

WPF 被 灵格斯翻译官 取词带崩

本文记录 灵格斯翻译官 翻译软件带崩 WPF 程序问题灵格斯翻译官 : http://www.lingoes.cn/ 只要有 WPF 的 ToolTip 或者其他小窗口,执行鼠标拖动过程中,就可能被带崩 我这次没有捞 dump 文件,就只记录此问题 退出 灵格斯翻译官 进程则没有此问题 我从事件管理器也看到 WPS …

读数据质量管理:数据可靠性与数据质量问题解决之道09数据可靠性

数据可靠性1. 数据可靠性 1.1. 数据可靠性指的是一个组织在整个数据生命周期中提供高数据可用性和健康状况的能力1.1.1. 是高数据质量带来的结果1.1.1.1. 高质量的大数据是这个大规模转型平台的核心1.1.2. 随着公司接收到比以往更…