1
coffeSlider 2018-02-07 19:21:08 +08:00 via Android 1
这是一种设计模式名字忘了,将用户每一部步操作压栈,undo 时 pop
|
2
meefly 2018-02-07 19:22:22 +08:00 via Android
红黑树可以么?
|
3
SuperMild 2018-02-07 19:35:59 +08:00
没有做过,但可以想到一种方法,把编辑器的每一个功能都定义一个指令名称,比如改变光标位置是 move(x, y),删除是 del(x, y)。然后把用户的每一个操作都记录下来,剩下的就好办了,什么队列啊栈啊之类的,一个不够弄两个,就能搞出来了。
|
4
FanError 2018-02-07 19:43:11 +08:00 via iPhone
command 设计模式吗
|
5
wweir 2018-02-07 19:47:35 +08:00 via Android
记录每个动作的回滚动作就可以了嘛
|
6
paperseller 2018-02-07 19:47:57 +08:00 via iPhone
会是像 cad 的每一步都可以用命令实现,撤销时就将命令倒推?跟 3# 的思路差不多
|
8
neoblackcap 2018-02-07 19:54:21 +08:00 1
数据库不是有 binlog 吗?你有 binlog 之类的机制就可以实现了。退出就情况吧
|
9
est 2018-02-07 20:00:36 +08:00 1
event sourcing 可以做到。
|
11
geelaw 2018-02-07 21:00:30 +08:00 1
恰当使用 persistent data structure 可以在很省内存的情况下保存历史。
不知道楼主是不是担心内存爆掉的问题——毕竟用一个 stack 记录历史做 undo manager 是平凡的思路。 |
12
Philippa 2018-02-07 21:48:27 +08:00 via Android
redo log 日志机制, 和 oracle 的日志回滚是类似的
|
13
gsls200808 2018-02-07 22:12:24 +08:00 via Android
每一步动作都有记录,撤销历史可以看到具体内容,如在 xx 单元格键入 XX 内容,回滚的时候动作就是撤销 XX 动作,返回十几步也就是撤销十几个动作,操作都记录下来了,用文件内存存个队列就可以了。
|
14
zjb861107 2018-02-07 22:35:54 +08:00 via iPhone 1
如果你用过 xmind,就会发现持续编辑一个文件会导致体积特别大。然后 xmind 自己提供了瘦身的功能,我试过可以把一个文件缩小约 10 倍。
所以其实也有一种实现方式是每个用户编辑的版本都做一个快照保存在文件里? |
15
Pain 2018-02-08 12:39:24 +08:00
@coffeSlider 你这和设计模式不搭边吧 ,顶多就是个栈的使用技巧。
|
16
coffeSlider 2018-02-08 13:56:56 +08:00 via Android
@Pain 抱歉,这个叫做命令模式,什么叫做顶多是个栈的使用技巧?那诸如观察者模式,就是顶多是个回调的使用技巧了?
|