请求发送者与接收者解耦——命令模式(四)
在命令模式中,我们可以通过调用一个命令对象的execute()方法来实现对请求的处理,如果需要撤销(Undo)请求,可通过在命令类中增加一个逆向操作来实现。
扩展
除了通过一个逆向操作来实现撤销(Undo)外,还可以通过保存对象的历史状态来实现撤销,后者可使用备忘录模式(Memento Pattern)来实现。
下面通过一个简单的实例来学习如何使用命令模式实现撤销操作:
Sunny软件公司开发人员使用命令模式设计了如图5所示结构图,其中计算器界面类CalculatorForm充当请求发送者,实现了数据求和功能的加法类Adder充当请求接收者,界面类可间接调用加法类中的add()方法实现加法运算,并且提供了可撤销加法运算的undo()方法。
图5 简易计算器结构图
本实例完整代码如下所示:
编译并运行程序,输出结果如下:
思考
修改简易计算器源代码,使之能够实现多次撤销(Undo)和恢复(Redo)。