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状态和优先级列表成为当前的第一个元素会更好吗?
只需掌握旧状态即可。例如
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)