为既成系统添加撤销/恢复功能

系统开始定位偏向演示,目前开始向编辑软件发展。可编辑物体的基类带有泛型,无法支持撤销/恢复功能对抽象对象的操作(主要指对数据对象的序列化、反序列化、通用属性的调用等)。

一、 数据结构

主要指撤销/恢复栈的结构、事件基类等底层数据结构的搭建。

二、事件封装

撤销/恢复的实现思路主要是创建、删除等用户行为事件进行封装,让操作的行为事件进出撤销/恢复栈。因此需要将用户所有有效行为进行单独的事件封装,底层通过抽象对象进行逻辑的处理。

三、逻辑处理

这部分主要是将已经存在的业务模块抽象进每个事件类中,调通撤销/恢复的逻辑。

四、业务填充

在所有用户有效操作行为处实例化对应的事件对象,并将该事件入栈。

 

碰到的问题:

创建/删除的撤销/恢复:

封装的创建物体的事件对象,该对象中缓存了创建的物体队列。调用撤销后,创建的物体被删除,该队列被清空;调用恢复后,创建的物体被重新创建出来,该队列没有被恢复,导致下次调用撤销时失败。

问题出现的调用顺序:

1、创建:事件对象入撤销栈;

2、撤销:事件对象出撤销栈,入恢复栈;

3、恢复:事件对象出恢复栈,入撤销栈。

在最后一步出现描述的问题。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值