40

news/2025/1/8 2:12:39/文章来源:https://www.cnblogs.com/wanbeibei/p/18656552

实验 20:备忘录模式

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

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

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

 

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

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

实验要求:

1. 画出对应的类图;

 

2. 提交源代码;

import java.util.ArrayList;

import java.util.List;

 

public class Caretaker {

    private List<Memento> list=new ArrayList<>();

    public Memento getMemento() {

        Memento mm=list.get(list.size()-2);

        list.remove(list.size()-2);

        return mm;

    }

    public void setMemento(Memento memento) {

        list.add(memento);

    }

}

 

 

public class Memento {

    private String account;

    private String password;

    private String telNo;

    public String getAccount() {

        return account;

    }

    public void setAccount(String account) {

        this.account = account;

    }

    public String getPassword() {

        return password;

    }

    public void setPassword(String password) {

        this.password = password;

    }

    public String getTelNo() {

        return telNo;

    }

    public void setTelNo(String telNo) {

        this.telNo = telNo;

    }

    public Memento(String account, String password, String telNo) {

        this.account = account;

        this.password = password;

        this.telNo = telNo;

    }

    

}

 

public class UserInfoDTO {

    private String account;

    private String password;

    private String telNo;

    public String getAccount() {

        return account;

    }

    public void setAccount(String account) {

        this.account = account;

    }

    public String getPassword() {

        return password;

    }

    public void setPassword(String password) {

        this.password = password;

    }

    public String getTelNo() {

        return telNo;

    }

    public void setTelNo(String telNo) {

        this.telNo = telNo;

    }

    

    public Memento saveMemento() {

        return new Memento(account,password,telNo);

    }

    public void restoreMemento(Memento memento) {

        this.account=memento.getAccount();

        this.password=memento.getPassword();

        this.telNo=memento.getTelNo();

    }

    public void show() {

        System.out.println("Account:"+this.account);

        System.out.println("Password:"+this.password);

        System.out.println("TelNo:"+this.telNo);

    }

    

}

 

public class Client {

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        UserInfoDTO user=new UserInfoDTO();

        Caretaker c=new Caretaker();

        

        user.setAccount("zhangsan");

        user.setPassword("123456");

        user.setTelNo("1310000000");

        System.out.println("状态一:");

        user.show();

        c.setMemento(user.saveMemento());

        System.out.println("-----------------------------");

        

        user.setPassword("111111");

        user.setTelNo("1310001111");

        System.out.println("状态二:");

        user.show();

        c.setMemento(user.saveMemento());

        System.out.println("-----------------------------");

        

        user.setPassword("zyx666");

        user.setTelNo("15733333333");

        System.out.println("状态三:");

        user.show();

        c.setMemento(user.saveMemento());

        System.out.println("-----------------------------");

        

        user.setPassword("777777");

        user.setTelNo("15511111111");

        System.out.println("状态四:");

        user.show();

        c.setMemento(user.saveMemento());

        System.out.println("-----------------------------");

        

        user.setPassword("666666");

        user.setTelNo("17455555555");

        System.out.println("状态五:");

        user.show();

        c.setMemento(user.saveMemento());

        System.out.println("-----------------------------");

        

        

        user.restoreMemento(c.getMemento());

        System.out.println("回到状态四:");

        user.show();

        System.out.println("-----------------------------");

        

        user.restoreMemento(c.getMemento());

        System.out.println("回到状态三:");

        user.show();

        System.out.println("-----------------------------");

        

        user.restoreMemento(c.getMemento());

        System.out.println("回到状态二:");

        user.show();

        System.out.println("-----------------------------");

        

        user.restoreMemento(c.getMemento());

        System.out.println("回到状态一:");

        user.show();

        System.out.println("-----------------------------");

    }

 

}

3. 注意编程规范。

 

 

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

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

相关文章

第22章 高级线程处理

第22章 高级线程处理 22.1 同步概述 多线程我们常需要一些同步结构进行线程间通讯。同步结构可以分为三类:互斥锁一次只允许一个线程执行特定的活动或一段代码。主要目的是令线程访问共享的写状态而不互相影响。互斥锁包括 lock​、Mutex​ 和 SpinLock​。 2. 非互斥锁 实现…

DINO-X环境搭建推理测试

​引子 开放世界检测,前文也写OV-DINO(感兴趣的童鞋,请移步OV-DINO开放词检测环境安装与推理-CSDN博客)。这不,DINO系列又更新了。OK,那就让我们开始吧。 一、模型介绍 IDEA 开发了一个通用物体提示来支持无提示的开放世界检测,从而无需用户提供任何提示即可检测图像中…

一文说透汇编语言中的各种地址

本文讨论了学习汇编语言时一些易混淆的、关于地址的概念前言 由于笔者水平有限,随笔中难免有些许纰漏和错误,希望广大读者能指正。 一、各种地址之间的区分 笔者在刚开始学习汇编语言时,不是很能分清楚汇编地址、逻辑地址、物理地址、段地址、偏移地址、线性地址等概念,这对…

什么是自动化测试?为什么要做自动化测试?如何学习自动化测试?

自动化测试是指使用软件工具和脚本来执行测试任务的过程。它可以自动化执行测试用例、生成测试报告和进行结果分析。自动化测试可以减少人工测试的工作量,并提高测试的效率和准确性。它在软件开发过程中起到了重要的作用,可以帮助开发团队快速发现和修复软件中的缺陷,确保软…

o3 发布了,摔碎了码农的饭碗

大家好,我是汤师爷~ 在 2024 年底,OpenAI 发布了最新推理模型 o3。o3模型相当炸裂,在世界级编程比赛中拿下第 175 名,打败 99.9% 的参赛者。AI 写代码都赶上顶级程序员了,程序员是不是要失业?最近不少读者反馈,像 GitHub Copilot、Claude Sonnet 3.5、Cursor 等 AI 辅助…

Diary - 2025.01.06

回到正轨了,感觉今天好像不太摆了,但还是在小摸阿发现昨天日期写成 2024 了。明天计划来说应该是主要写题解了!!! 上午还有个模拟赛,但是说不定又是像之前那样拉个 USACO 来(?)。 仍记那时 USACO 金组没 ak,t3 被卡常了,6。 明天要写的题解:Luogu P11513 [ROIR 201…

前端必备基础系列(七)原型/原型链/this

对象的原型: JavaScript中每个对象都有一个特殊的内置属性[[prototype]],这个特殊属性指向另外一个对象。 当我们访问一个对象上的某个属性时,首先会检查这个对象自身有没有这个属性,如果没有就会去[[prototype]]指向的对象查找。 那么这个特性就可以帮助我们实现继承了。 …

cv2.imwrite保存的图像是全黑的

1.保存,全黑的图像cv2.imwrite(img/test.jpg, imutils.resize(enhancedImg, height=151,width=240))2.原因分析 3.原本image是0-255的数值,现在标准化了,全都是0-1之间的数值,还原,乘以255,图片输出正常。cv2.imwrite(img/test1.jpg, imutils.resize(enhancedImg, height…

SaltStack快速入门

Saltstack快速入门 saltstack介绍 Salt,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯 主要功能:远程执行 配置管理,参考官方文档: http://docs.saltstack.cn/ 安装说明: https://docs.s…

计数问题选讲做题记录

从 $1+1$ 到 $\exp(\sum\limits_{i=1}^k\ln(1+ix))$。计数杂题。calc 考虑先不管数字之间的顺序,最后给答案乘上一个 \(n!\)。 记 \(dp_{i,j}\) 表示前 \(i\) 个数在 \([1,j]\) 之间选,所产生的总贡献,显然有 \(dp_{i,j}=dp_{i,j-1}+j\times dp_{i-1,j-1}\),最后的答案是 \…