使用命令取消一个操作的程序
时间:2012-6-12
让你的客户(真正的客户或者另一个程序)撤销一个已经执行的操作,是在编写程序时经常遇到的需求,现在,撤销操作是各种正规的文本编辑软件必备的操作,而且这个功能在其他软件中也十分觉,例如,大多数数据库都支付回退处理(即撤销操作的另一个名字).实际上,撤销操作能帮助难免犯错的八或程序查找出由于错误的而导致的结果.
实现撤销操作的一种基本方法是在进行更动之前记住当时的状态,然后如果客户要求撤销这个更动,那只需要恢复之前记住的状态即可,这种做法的问题在于,文本文件或者文本处理文档(且不论数据库)可能会比较大,每次当你进行修改的进修都要制作一个包含所有内容的副本,这会使你的程序在资源密集的情况下迅速产生巨大冗余.
对于这种情况,命令模式能够进行进一点的帮助,一个命令对象封闭子筛一些事情的逻辑,通过一些发送,这个命令对象同样可以记录如何撤销这些事情,这个主意其实很简单,我们创建的每一个可以撤销的倒序都包含两个方法,基一当然是处理事情的execute方法,伴随着这个方法,我们再加入一个unexecute方法,用于撤销已经执行的操作,当用户在进行一系列修改的时候,我们创建一个又一个能立刻的命令对象来实现这些修改,同时我们还在一个列表中依次记录这些命令对象,如果用户突然改变子主意要撤销修改,那么我们只需要从那个列表中找到最后程序的那个命令.并且unexecute它.不仅最后一个命令可以被撤销,按照同样的方法,我们可以回测整个命令历史,将之前执行过的任何数量的命令撤销.