一个类在进行工作时会调用自己或是其他类的方法,虽然调用结果会反映在对象的状态中,但是并不会留下工作的历史纪录。
这时,如果有一个类,用来表示进行这项工作的命令就会方便很多。每一项想做的工作就不再是方法的调用这种动态处理了,而是一个表示命令的类的实例,既可以用物来表示,要想管理工作的历史纪录,只需管理这些实例的集合即可,而且还可以随时再次执行过去的命令,或是将多个过去的命令整合为一个新命令并执行。
在设计模式中,我们称这样的命令为Command模式。
示例程序
这段示例程序是一个画图软件,用户拖动鼠标时程序会绘制出红色圆点,点击clear按钮后会清除所有圆点。
用户每拖动一次鼠标,应用程序都会为“在这个位置画一个点”这条命令生成一个DrawCommand类的实例,只要保存了这条实例,以后有需要时就可以重新绘制。
Command接口
该接口是表示命令的接口,它的作用就是执行什么东西。
package Command;
//命令接口
public interface Command {
//声明抽象方法
public abstract void execute();
}
MacroCommand类
该类表示由多条命令整个成的命令,该类实现了Command接口。
package Command;
import java.util.Iterator;
import java.util.