Hi I\'m about to add new functionality to application which I\'m currently writting. I need to write a undo/redo fnctionality. However 90% of our application is ready and I
As Reed Copsey says the most common pattern to implementing do/redo is Command Pattern. The basic idea is to implement actions as commands that implemets some interface like this:
public interface ICommand { public void Execute(); public void Undo(); }
Then You have a class (Control) that executes all the commands as a whole, such class must be composed by a group of commands, the when you execute the commands each command is pushed inside a Stack (by means the push() method), in the case you want to undo the actions then you take every element from the Stack (by means of pop() ) an executes its Undo() method.
public class Control {
private ArrayList commands = new ArrayList();
private Stack stack = new Stack();
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(); }
}
}
}
Note: this is a very simple code, only for trying to clarify the ideas behind the Command Pattern.
link text