请求发送者与接收者解耦——命令模式(四)

    在命令模式中,我们可以通过调用一个命令对象的execute()方法来实现对请求的处理,如果需要撤销(Undo)请求,可通过在命令类中增加一个逆向操作来实现。

    扩展

    除了通过一个逆向操作来实现撤销(Undo)外,还可以通过保存对象的历史状态来实现撤销,后者可使用备忘录模式(Memento Pattern)来实现。

    下面通过一个简单的实例来学习如何使用命令模式实现撤销操作:

    Sunny软件公司开发人员使用命令模式设计了如图5所示结构图,其中计算器界面类CalculatorForm充当请求发送者,实现了数据求和功能的加法类Adder充当请求接收者,界面类可间接调用加法类中的add()方法实现加法运算,并且提供了可撤销加法运算的undo()方法。

    图5 简易计算器结构图

    本实例完整代码如下所示:

    编译并运行程序,输出结果如下:

    思考

    修改简易计算器源代码,使之能够实现多次撤销(Undo)和恢复(Redo)。