软件设计二十
实验 20:备忘录模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解备忘录模式的动机,掌握该模式的结构;
2、能够利用备忘录模式解决实际问题。
|
|
|
|
[实验任务一]:多次撤销
改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用HashMap、ArrayList等集合数据结构实现)。
实验要求:
1. 画出对应的类图;
2. 提交源代码;
//Caretaker.java
public class Caretaker
{
private Memento[] array = null;
private int index;
private Memento memento;
public Memento getMemento()
{
return memento;
}
public void setMemento(Memento memento)
{
this.memento=memento;
}
public Caretaker(){
array = new Memento[10];
index = 0;
}
public void addMemento(Memento Memento){
array[index++] = Memento;
}
public Memento preMemento(){
Memento pop = null;
try {
pop = array[--index];
} catch (Exception e) {
e.printStackTrace();
}
return pop;
}
}
//Memento.java
class Memento
{
private String account;
private String password;
private String telNo;
public Memento(String account,String password,String telNo)
{
this.account=account;
this.password=password;
this.telNo=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;
}
}
//UserInfoDTO.java
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("账号是" + this.account);
System.out.println("密码是" + this.password);
System.out.println("电话是" + this.telNo);
}
}
//main.java
public class main {
public static void main(String args[]) {
UserInfoDTO user = new UserInfoDTO();
Caretaker c = new Caretaker();
user.setAccount("liansaixuan");
user.setPassword("123456");
user.setTelNo("130000");
System.out.println("状态一:");
user.show();
c.addMemento(user.saveMemento());
System.out.println("-----------------");
user.setPassword("111111");
user.setTelNo("130111");
System.out.println("状态二:");
user.show();
c.addMemento(user.saveMemento());
System.out.println("-----------------");
user.setPassword("222222");
user.setTelNo("130222");
System.out.println("状态三:");
user.show();
System.out.println("-----------------");
user.restoreMemento(c.preMemento());
System.out.println("回到状态二:");
user.show();
System.out.println("-----------------");
user.restoreMemento(c.preMemento());
System.out.println("回到状态一:");
user.show();
System.out.println("-----------------");
}
}
3. 运行结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
2023-11-22 前端vue中使用多个dialog对话框