实验 20:备忘录模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解备忘录模式的动机,掌握该模式的结构;
2、能够利用备忘录模式解决实际问题。
[实验任务一]:多次撤销
改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用HashMap、ArrayList等集合数据结构实现)。
实验要求:
1. 画出对应的类图;
2. 提交源代码;
import java.util.ArrayList;
// 用户信息类
class UserInfo {
private String name;
private int age;
public UserInfo(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.name = name;
this.age = age;
}
}
// 备忘录类
class UserInfoMemento {
private UserInfo savedUserInfo;
public UserInfoMemento(UserInfo userInfo) {
this.savedUserInfo = new UserInfo(userInfo.getName(), userInfo.getAge());
}
public UserInfo getUserInfo() {
return savedUserInfo;
}
}
// 原发器类
class UserInfoOriginator {
private UserInfo userInfo;
public UserInfoOriginator(UserInfo userInfo) {
this.userInfo = userInfo;
}
public UserInfoMemento createMemento() {
return new UserInfoMemento(userInfo);
}
public void restoreFromMemento(UserInfoMemento memento) {
this.userInfo = memento.getUserInfo();
}
public UserInfo getUserInfo() {
return userInfo;
}
}
// 负责人类
class UserInfoCaretaker {
private ArrayList<UserInfoMemento> mementoList = new ArrayList<>();
public void addMemento(UserInfoMemento memento) {
mementoList.add(memento);
}
public UserInfoMemento getMemento(int index) {
if (index >= 0 && index < mementoList.size()) {
return mementoList.get(index);
}
return null;
}
}
// 测试类
public class Main {
public static void main(String[] args) {
// 创建初始用户信息
UserInfo initialUserInfo = new UserInfo("John", 30);
UserInfoOriginator originator = new UserInfoOriginator(initialUserInfo);
UserInfoCaretaker caretaker = new UserInfoCaretaker();
// 第一次修改用户信息并保存备忘录
originator.getUserInfo().setName("Jane");
caretaker.addMemento(originator.createMemento());
// 第二次修改用户信息并保存备忘录
originator.getUserInfo().setAge(35);
caretaker.addMemento(originator.createMemento());
// 进行撤销操作,恢复到第一次修改前的状态
originator.restoreFromMemento(caretaker.getMemento(0));
System.out.println("当前用户信息:");
System.out.println("姓名:" + originator.getUserInfo().getName());
System.out.println("年龄:" + originator.getUserInfo().getAge());
}
}
3. 注意编程规范。