设计模式--命令模式
2023-12-25 06:06:07
实验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();
}
}
运行效果
文章来源:https://blog.csdn.net/qq_62768655/article/details/135188174
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!