[实验任务一]:多次撤销和重复的命令模式
某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用于存储一系列命令对象,并通过该命令集合实现多次undo()和redo()操作,可以使用加法运算来模拟实现。
实验要求:
1. 提交类图;
2. 提交源代码;
package rjsj.no16;
abstract class AbstractCommand{//抽象命令
public abstract int execute(int value);
public abstract int undo();
public abstract int redo();
}
class ConcreteCommand extends AbstractCommand{//具体命令
private Adder adder = new Adder();
private int value;
public int execute(int value) {
this.value=value;
return adder.add(value);
}
public int undo() {
return adder.add(-value);
}
public int redo() {
return adder.add(+value);
}
}
class CalculatorForm {//调用者
private AbstractCommand command;
public void setCommand(AbstractCommand command) {
this.command=command;
}
//业务方法,用于调用命令类的方法
public void compute(int value) {
int i = command.execute(value);
System.out.println("执行运算,运算结果为:" + i);
}
public void undo() {
int i = command.undo();
System.out.println("执行撤销,运算结果为:" + i);
}
public void redo() {
int i = command.redo();
System.out.println("执行重复,运算结果为:" + i);
}
}
class Adder {//接收者
private int num=0;
public int add(int value) {
num+=value;
return num;
}
}
class Client {//客户类
public static void main(String args[]) {
CalculatorForm form = new CalculatorForm();
ConcreteCommand command = new ConcreteCommand();
form.setCommand(command);
form.compute(10);
form.redo();
form.compute(5);
form.compute(10);
form.undo();
}
}
3. 注意编程规范。