24.11.25
[实验任务一]:多次撤销
改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用HashMap、ArrayList等集合数据结构实现)。
实验要求:
-
画出对应的类图;
-
提交源代码;
package org.test.ruanjiansheji.beiwanglu;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
// 抽象命令接口
interface AbstractCommand {
int execute(int value); // 执行操作
int undo(); // 撤销操作
}
// Adder 类,用于实现累加功能
class Adder {
private int num = 0;
public int add(int value) {
num += value;
return num;
}
}
// 具体命令类
class ConcreteCommand implements AbstractCommand {
private Adder adder = new Adder();
private List
@Override
public int execute(int value) {
list.add(value);
return adder.add(value);
}
@Override
public int undo() {
if (!list.isEmpty()) {
int value = list.remove(list.size() - 1);
return adder.add(-value);
} else {
return 0;
}
}
}
// CalculatorForm 类,作为命令的客户端
class CalculatorForm {
private AbstractCommand command;
public void setCommand(AbstractCommand command) {
this.command = command;
}
public void compute(int value) {
int result = command.execute(value);
System.out.println("执行运算,运算结果为:" + result);
}
public void undo() {
int result = command.undo();
System.out.println("执行撤销,运算结果为:" + result);
}
}
// 主程序
public class Calculator {
public static void main(String[] args) {
CalculatorForm form = new CalculatorForm();
ConcreteCommand command = new ConcreteCommand();
form.setCommand(command);
boolean flag = true;
Scanner scanner = new Scanner(System.in);
while (flag) {
System.out.println("请输入想要操作的选项,1为计算,-1为撤销,0为退出");
int n = scanner.nextInt();
switch (n) {
case 1:
System.out.println("请输入想要添加的数值");
int m = scanner.nextInt();
form.compute(m);
break;
case -1:
form.undo();
break;
case 0:
flag = false;
break;
default:
System.out.println("输入错误请重新输入!!");
break;
}
}
scanner.close();
}
}
- 注意编程规范。