命令式redo/undo和键盘行为

几个星期前在看前辈的redo/undo总结,这次终于可以自己试试这个命令式redo/undo的写法了。

命令式redo/undo主要有三个部分;

1,ICommand;(命令作用的对象,excute,undo,redo,还有一些Undo,redo参数变量)

2,commandStack;(存储命令的栈,undo和redo都在这栈里面上下走)

3,通道,也可以说是触发器,把命令放进commandStack里面

 

这种方式其实和ACM的一些水题很类似,练习堆栈的操作。

其中注意几点小问题:

1,当执行完undo/redo之后,再执行excute时,则_index之后的命令全部清除;以WPS或者WORD为例,都有这样的操作。其实这里面的思想很是奇特,如果我不清空后面的内容呢?就好象画一个圆,画到四分之三的时候,突然画出得不好了,要重新从四分之三来画,当画完四分之一再执行一次Undo的时候,也就是还要再跑到那个画得不好的地方然后再返回四分之三的地方,也就是那个不好的地方其实在undo的时候已经被定位为无用的数据,所以可以不要,所以才会在执行excute的时候大胆地把后面的数据不要。这个有点牵涉到人的使用心理。当人们会使用撤销这个操作时,说明当前的数据已经为错误,无用的,所以当然是要放弃的。突然很是震撼这个功能,很是钦佩总结这个功能的人。

2,一个越界的问题。越界在这里显得尤为明显。而且容易出错。

插入栈的结点,可以实现一个操作实现多个命令

 

 

边界处理问题

 

 

3,键盘行为操作;

快捷键这里设置依据之前华哥框架里面的鼠标行为,思考了下ctrl+c/ctrl+v的行为,先是按下control然后再c/v,所以在keyup的时候判断ctrl有没有Up,没有的话表示粘帖复制行为仍存在。所以加多个变量保存ctril是否存在,这样几个消息流下来后就可以判断这个行为了。很是精彩。。。。

 

  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值