11.13实验16:命令模式

[实验任务一]:多次撤销和重复的命令模式

某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用于存储一系列命令对象,并通过该命令集合实现多次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. 注意编程规范。

 

 

posted @     阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示