针对问题

假设要设计一个文本编辑器的“打开”按钮,点击之后显示“打开”对话框,之后在窗口中显示文档的内容。我们可以通过按钮类派生一个新类,重写Click处理
逻辑,在Click函数中执行以上的功能。
但这样设计的问题有两个:
1、如果需要多个按钮,那么每种按钮都需要派生一个新类。
2、如果要实现一个“打开”的菜单项,由于菜单不能继承自按钮,代码无法复用。
在这种情况下需要用某种设计模式将“调用者”与“算法逻辑”、“被操作者”解耦。

介绍

将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。

实现

Command模式的静态图如下:

其中:
Invoker为操作的调用者,例子中的“打开”按钮。
Receiver为被操作对象,例子中的文档窗口。… Read the rest