补偿式或者反操作式的解决方案
(1) 在实现命令接口之前,先来定义真正实现计算的接口,没有它命令什么都做不了,操
作运算的接口的示例代码如下:
public interface OperaonApi { //操作运算的接口
public int getResult(); //获取计算完成后的结果, return 计算完成后的结果
public void setResult(int result); //设置计算开始的初始值, result 计算开始的初始值
public void add(int num); //执行加法, num 需要加的数
public void substract(int num); //执行减法, num 需要减的数
}
定义了接口,来看看真正执行加减法的实现,示例代码如下:
public class Operaon implements OperaonApi{ //运算类,真正实现加减法运算
private int result; //记录运算的结果
public int getResult() {
return result;
}
public void setResult(int result) {
this.result = result;
}
public void add(int num){ //实现加法功能
result += num;
}
public void substract(int num){ //实现减法功能
result -= num;
}
}
(2) 接下来,来抽象命令接口,由于要支持可撤销的功能,所以除了跟前面一样定义一个
执行方法外,还需要定义一个撤消操作的方法,示例代码如下:
public interface Command { //命令接口,声明执行的操作,支持可撤销操作
public void execute(); //执行命令对应的操作
public void undo(); //执行撤销命令对应的操作
}
(3) 应该来实现命令了,具体的命令分成了加法命令和减法命令,先来看看加法命令的实
现,示例代码如下:
public class AddCommand implements Command{ //具体的加法命令实现对象
private OperaonApi operaon = null; //持有具体执行计算的对象
private int opeNum; //操作的数据,也就是要加上的数据