- RPN(数据结构中的逆波兰表达式) 对栈这种数据结构练习, 比 中缀表达式更好 没有operator优先级和小括号的进栈出栈
- 邓俊辉老师视频有对RPN的介绍:看完基本思路就很明确了
- 数字直接进栈,遇到操作符 则之前的数字出栈在与操作符计算 压栈
- 解决undo 撤销 问题
- 遇到sqrt 需要运用 BigDecimal
undo 思路来源于Memento and command pattern
```
// 将 myObject 包装了一下
public class Memento {
MyObject myObject;
public MyObject getState() {
return myObject;
}
public void setState(MyObject myObject){
this.myObject = myObject;
}
}
// Command java
public abstract class Command {
MyObject myObject; //memnto 中 myobject的镜象
Memento memento;
public abstract void execute(); // 当 命令执行时 , 将新的myObject 给 memento
public abstract void undo(); //将旧的 myobject 给 memento
}
```
-
每个命令执行要进栈 undo 栈就要 pop 执行 undo
需要注意的是 memento 中的 myObject 与 command 中的 myObject
deep copy
offer three methods deep copy
参考资料
- https://stackoverflow.com/questions/7374545/the-undo-and-redo-implementation-in-java
- https://www.codeproject.com/Articles/8303/Using-the-Command-pattern-for-undo-functionality