某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用于存储一系列命令对象,并通过该命令集合实现多次undo()和redo()操作,可以使用加法运算来模拟实现。

public abstract class AbstractCommand {
    public abstract int valueOf(int value);
    public abstract int undo();

    public abstract int redo();
}
public class Adder {
    private int sum = 0;
    public int add(ArrayList<Integer> value){
        for(int i=0;i<value.size();)
        {
            sum += value.get(0);
            value.remove(0);
        }
        return sum;
    }
    public int reduce(ArrayList<Integer> value){
        for(int i=0;i<value.size();)
        {
            sum -= value.get(0);
            value.remove(0);
        }
        return sum;
    }
}
class CalculatorForm {//调用者
    private AbstractCommand command;

    public void setCommand(AbstractCommand command) {
        this.command=command;
    }

    //业务方法,用于调用命令类的方法
    public void compute(int value) {
        int i = command.valueOf(value);
        System.out.println("执行输入,输入命令为:" + value);
    }

    public void undo() {
        int i = command.undo();
        System.out.println("执行撤销,运算结果为:" + i);
    }

    public void redo() {
        int i = command.redo();
        System.out.println("执行运算,运算结果为:" + i);
    }
}
public class Command extends AbstractCommand{

    private Adder adder = new Adder();
    private ArrayList<Integer> value = new ArrayList<Integer>() ;
    @Override
    public int valueOf(int value) {
        this.value.add(value);
        return value;
    }

    @Override
    public int undo() {
        return adder.reduce(value);
    }

    @Override
    public int redo() {
        return adder.add(value);
    }
}
public class main {
    public static void main(String args[]) {
        CalculatorForm form = new CalculatorForm();
        Command command = new Command();
        form.setCommand(command);

        form.compute(1);
        form.redo();
        form.compute(2);
        form.compute(3);
        form.undo();

    }
}

 

posted on 2023-11-20 09:09  XiSoil  阅读(5)  评论(0编辑  收藏  举报