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

问题

在简单的 GUI 程序中,工程师可能会选择将业务代码和 UI 代码耦合在一起,但是这样带来的问题是很多 UI 控件执行的操作实际上是相同的,而且很多命令具有相似的代码。

为了解决这个问题,工程师可以选择将业务逻辑和 UI 代码进行分离,从而允许不同的组件共用同样的业务逻辑。

进一步地,我们可以将命令进行抽象,为所有命令实现相同的接口,按钮不执行命令,而是将命令进行排队,命令的实际执行被进一步延迟。由于命令进行了排队,因此我们就具备了一个命令队列,从而允许进行撤销等操作。

基本结构

命令模式的基本结构如下:

Diagram
  • Invoker 实际上是不同 UI 组件的实例。Invoker 不执行命令,只是将命令入队。

  • Receiver 代表了执行命令的对象。

Last moify: 2022-12-04 15:11:33
Build time:2025-07-18 09:41:42
Powered By asphinx