实验16:命令模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解命令模式的动机,掌握该模式的结构;
2、能够利用命令模式解决实际问题。
[实验任务]:多次撤销和重复的命令模式
某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用于存储一系列命令对象,并通过该命令集合实现多次undo()和redo()操作,可以使用加法运算来模拟实现。
类图
源代码
public abstract class AbstractCommand
{
public abstract int execute(int value);
//撤销
public abstract int undo();
//重做
public abstract int redo();
}
public class Adder
{
private int num = 0;
public int add(int value)
{
num += value;
return num;
}
}
public 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);
}
}
public class ConcreteCommand extends AbstractCommand
{
private Adder adder = new Adder();
private int value;
@Override
public int execute(int value)
{
this.value = value;
return adder.add(value);
}
@Override
public int undo()
{
return adder.add(-value);
}
@Override
public int redo()
{
return adder.add(value);
}
}
/**
* @author mendianyu
*/
public class Client
{
public static void main(String[] args)
{
CalculatorForm form = new CalculatorForm();
AbstractCommand command = new ConcreteCommand();
form.setCommand(command);
form.compute(10);
form.compute(5);
form.compute(10);
form.undo();
form.redo();
form.undo();
form.redo();
}
}
运行效果