java中撤销_java – 实现数组的撤消和重做?

我会像这样解决.基本上会有三个列表.

>具有实际值的列表

>撤销具有Command接口实例的列表

>具有Command接口实例的重做列表(可选,下面说明)

public interface Command {

void do();

void undo();

}

将有两个Command实现:AddCommand和RemoveCommand.

>在add()中,AddCommand的新实例创建并添加到撤消列表中.然后我们调用这个命令的do(),它修改实际值并存储添加项的索引.

>在remove()中,创建并添加到撤销列表中的RemoveCommand的新实例.然后我们调用这个命令的do(),它修改实际值并存储已删除项的索引和值.

> undo()我们从undo列表中拉取最后一个命令,并执行该命令的undo()方法.该命令推送到重做列表. AddCommand和RemoveCommand的撤消方法可以恢复更改.

>重做()我们从重做列表中拉出最后一个命令,并再次执行do()方法. Pulled命令被添加到撤消列表.

另一个优化是删除重做列表,并使用undo index.在这种情况下,当您撤消()时,您不需要从列表中删除/添加值,而只需将undo索引减1.类似地,redo()会增加一个.

因此,最终解决方案将具有值列表,撤销列表和索引值.

更新:

对于最简单的情况,只需要一个undo()/ redo()操作,解决方案看起来会更加简单.而不是具有撤消列表和索引,它足以存储最新的命令实例.因此,我们将有一个值列表和最后一个undo命令的实例.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值