UNDO/REDO实现感想[指正有分]
GOOGLE了一把UNDO/REDO实现,发现很多只谈到COMMAND,不是很满意,自己写个实现感想,就放在这里吧。
实际上一个完整UNDO/REDO系统除了COMMAND,还有很多复杂的地方:
1 在每一个COMMAND里面必须保存一个MEMENTO,用来保存COMMAND执行前的状态
1.1 该MEMENTO是用什么方式保存?参数还是内存块?
如是内存块的话?UNDO步数一多,内存是否成为问题?如果是参数的话?如何解析?
1.2 MEMENTO什么时候获取,是自动获取还是用户填入?
1.3 如果是不同类型的COMMAND混合使用,MEMENTO类型是否相同?不同的话,混合使用是否会有问题?
2 COMMANDHISTORY中UI的支持
2.1 如果只支持UNDO/REDO,只需要关心UNDO步数和PRESENTLINE就可以了;
2.2 如果还要支持RESET,必须保存原始状态;
2.3 如果需要支持SLIDER(LIKE PHOTOSHOP),还要考虑UNDO/REDO跳跃及其效率优化问题
3 如何支持无限UNDO/REDO的话
3.1 虚拟内存就成为必须,这部分的管理放在什么地方?
3.2 效率没问题吗?
4 如何方便的替换
4.1 如何可以方便的替换MEMENTO/MEMENTO保存方式/参数及其解析方法?
4.2 如何可以方便的替换UNDO跳跃处理策略?
4.3 如何可以方便的替换虚拟内存管理策略?
关键词:UNDO/REDO, COMMAND, MEMENTO, 设计模式