实现撤消操作

时间:2012-12-13 16:06:15

标签: implementation undo

假设我们选择了整个文件并删除了其内容。我们如何以节省空间的方式为此场景实现撤消操作。

1 个答案:

答案 0 :(得分:0)

您的问题有点模糊,但Command设计模式可能会对您有所帮助。通过这种方式,您可以封装命令的执行,但也可以选择调用undo()并将主题恢复到执行命令之前的状态。它通常用于应用程序中的Undo / Redo堆栈操作。

作为一个例子,你可以:

public interface Command{

  public void exec();
  public void undo();
}

然后,您可以拥有每个命令:

public class DeleteContents implements Command{

 SomeType previousState;
 SomeType subject;

 public DeleteContents(SomeType subject){
  this.subject = subject; // store the subject of this command, eg. File?
 }

 public void exec(){
   previousState = subject; // save the state before invoking command

   // some functionality that alters the state of the subject
   subject.deleteFileContents();
 }

  public void undo(){

    subject.setFileContents(previousState.getFileContents()); // operation effectively undone
  }

}

您可以将命令存储在数据结构(例如控制器)中,并可以自由地调用它们的执行和撤消。这有助于你的情况吗?

这是一个链接: http://en.wikipedia.org/wiki/Command_pattern