目录
1.Command模式
1.1 作用
一个类在进行工作时会调用自己或是其他类的方法,虽然调用结果会反映在对象的状态中,但并不会留下工作的历史记录。Command模式就是用类来表示命令的实例,把命令当成“物”来使用,要想管理工作的历史记录,只需管理这些实例的集合即可,而且还可以随时再次执行过去的命令,或是将多个过去的命令整合为一个新命令并执行。
1.2 示例程序
1.2.1 示例程序类图
1.2.2 Command接口
//表示命令的接口
public interface Command {
public abstract void execute();//执行命令
}
1.2.3 MacroCommand类
//具体的命令类
public class MacroCommand implements Command{
private Stack<Command> commands = new Stack<>();//存储历史命令,用栈来体现命令的顺序,栈顶是最近的命令
@Override
public void execute() {
Iterator it = commands.iterator();//把历史命令都执行一遍
while (it.hasNext()) {
((Command)it.next()).execute();
}
}
public void add(Command cmd) {
if (cmd != this) {//防止不小心把当前命令加进去,造成死循环
commands.push(cmd);
}
}
public void undo() {//撤销一个命令
if (!commands.empty()) {
commands.pop();
}
}
public void clear() {//清除全部命令
commands.clear();
}
}
1.2.4 DrawCommand类
//画一个点的命令类
public class DrawCommand implements Command{
private Drawable drawable;//绘制对