系统开始定位偏向演示,目前开始向编辑软件发展。可编辑物体的基类带有泛型,无法支持撤销/恢复功能对抽象对象的操作(主要指对数据对象的序列化、反序列化、通用属性的调用等)。
一、 数据结构
主要指撤销/恢复栈的结构、事件基类等底层数据结构的搭建。
二、事件封装
撤销/恢复的实现思路主要是创建、删除等用户行为事件进行封装,让操作的行为事件进出撤销/恢复栈。因此需要将用户所有有效行为进行单独的事件封装,底层通过抽象对象进行逻辑的处理。
三、逻辑处理
这部分主要是将已经存在的业务模块抽象进每个事件类中,调通撤销/恢复的逻辑。
四、业务填充
在所有用户有效操作行为处实例化对应的事件对象,并将该事件入栈。
碰到的问题:
创建/删除的撤销/恢复:
封装的创建物体的事件对象,该对象中缓存了创建的物体队列。调用撤销后,创建的物体被删除,该队列被清空;调用恢复后,创建的物体被重新创建出来,该队列没有被恢复,导致下次调用撤销时失败。
问题出现的调用顺序:
1、创建:事件对象入撤销栈;
2、撤销:事件对象出撤销栈,入恢复栈;
3、恢复:事件对象出恢复栈,入撤销栈。
在最后一步出现描述的问题。