设计模式——Command命令模式

目录

  • 前言
  • 1 定义
  • 2 适用性
  • 3 结构
    • 3.1 结构图
    • 3.2 参与者
  • 4 Spring实际应用举例
    • 4.1 Command——JdbcTemplate
    • 4.2 Receiver——StatementCallback
  • 5 总结
  • 参考文献

前言

当我们需要对各种请求进行参数化,模板化,但是不清楚被请求的执行者或操作者的信息时,可以使用Command命令模式。

1 定义

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

2 适用性

  • 抽象出待执行的操作以参数化各种不同请求。
  • 可以在不同时刻指定、排列和执行请求。
  • 支持可撤销的操作。
  • 支持修改日志。
  • 用构建在原语操作的高层操作构建系统。

3 结构

3.1 结构图

命令模式结构图:
设计模式——Command命令模式_第1张图片

3.2 参与者

根据上图参与者说明如下:

  • Client:请求的客户端。
  • Command:将客户请求参数化为Command命令,并设置特定的Receiver。
  • ConcreteCommand:具体的命令,设置了具体的Receiver。
  • Receiver:执行特定请求的特定操作。
  • ConcreteReceiver:实例化的接收者,执行最终特定的操作。

协作过程如下:
客户通过创建一个具体Concrete命令,并设置具体的接收者,以达到解耦请求和执行者。执行过程通过Command.execute调用具体的接收者的action操作。

4 Spring实际应用举例

主要是JdbcTemplate类,该类简化了用户对jdbc的操作,并避免了命令错误。

4.1 Command——JdbcTemplate

JdbcTemplate定义如下:
设计模式——Command命令模式_第2张图片
可以看出该类定义了多个execute方法也就是命令方法,通过设置不同的回调参数(具体的Receiver)来实现对不同请求的参数化操作。

4.2 Receiver——StatementCallback

以具体的QueryStatementCallback为例,该类实现了StatementCallback:
设计模式——Command命令模式_第3张图片
具体的查询操作,调用具体Receiver.action进行操作。

5 总结

当需要统一参数化请求,同时有可撤销和可记录等需求时,可以考虑使用Command模式。

参考文献

[1]. 《设计模式》

你可能感兴趣的:(设计模式,java,后端,设计模式,命令模式)