正如Reed Copsey所说,实现do/redo最常见的模式是命令模式.基本思想是将操作实现为执行某些接口的命令,如下所示:
public interface ICommand { public void Execute(); public void Undo(); }
Run Code Online (Sandbox Code Playgroud)
然后你有一个类(Control)作为一个整体执行所有命令,这样的类必须由一组命令组成,当你执行命令时,每个命令被推入一个Stack(通过push()方法),在如果要撤消操作,则从堆栈中获取每个元素(通过pop())执行其Undo()方法.
public class Control {
private ArrayList<ICommand> commands = new ArrayList<ICommand>();
private Stack<ICommand> stack = new Stack<ICommand>();
public Control() {
commands.add(new Command1());
commands.add(new Command2());
commands.add(new Command3());
}
public void Execute() {
for(int index=0; index<=command.size(); index++) { command.Execute(); stack.push(command);}
}
public void Undo()
{
while (!stack.empty()) {
ICommand command = (ICommand)stack.pop();
if (command != null) { command.Undo(); }
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:这是一个非常简单的代码,仅用于尝试澄清命令模式背后的想法.
| 归档时间: |
|
| 查看次数: |
7692 次 |
| 最近记录: |