在 Java 中为状态更改实现撤消

Kon*_*che 3 java design-patterns undo-redo

我开始实施命令模式,希望得到一个有用的解决方案来解决我提供撤消操作的问题。现在我面临着一个问题:

在涉及操作时实现撤消相当容易:当我将 5 添加到一个数字时,然后减去 5。当我将一个对象添加到列表中时,我将其删除,依此类推。但是如果我有一个完整的状态而不是一个列表之类的东西呢?

一个例子:我对一个类中的一个线程的信息进行建模:

public class ThreadInfo implements Comparable<ThreadInfo> {

    final int id;
    String name;
    int priority;
    String state;
    int waitCount;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

某些信息不会改变,例如 id。waitCount如上所述,撤消很容易,只需减去即可。但是呢priority或者state呢?目前尚不清楚如何撤消这些信息。

我想出的唯一想法是:在初始化命令对象时,保留其对象中的旧状态:通过将相关数据传递给构造函数:

public MyCommand(int priority, String state) {
   previousPriority = priority;
   previousState = state;
}
Run Code Online (Sandbox Code Playgroud)

或者让ThreadInfo状态和优先级列表成为当前的第一个元素会更好吗?

Sta*_*lin 5

只需掌握旧状态即可。例如

 class ChangeFoo {
    ChangeFoo (Bar bar, foo newFoo){}
    void execute(){
        oldFoo = bar.getFoo();
        bar.setFoo(newFoo);
    }
    void undo(){
        bar.setFoo(oldFoo);
    }
 }
Run Code Online (Sandbox Code Playgroud)