定义
命令模式(Command Pattern)是对命令的封装,每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式解耦了请求方和接收方,请求方只需请求执行命令,不用关心命令是怎样被接收,怎样被操作以及是否被执行...等。
本质:解耦命令请求与处理。
属于行为型模式。
适用场景
- 现实语义中具备“命令”的操作(如命令菜单,shell命令...)。
- 请求调用者和请求的接收者需要解耦,使得调用者和接收者不直接交互。
- 需要抽象出等待执行的行为,比如撤销(Undo)操作和恢复(Redo)等操作。
- 需要支持命令宏(即命令组合操作)。
举例
- JDK Runnable
- JUnit Test
- 系统控制台cmd
优点
- 通过引入中间件(抽象接口),解耦了命令请求与实现。
- 扩展性良好,可以很容易地增加新命令。
- 支持组合命令,支持命令队列。
- 可以在现有命令的基础上,增加额外功能(比如日志记录...,结合装饰器模式更佳)。
缺点
- 具体命令类可能过多。
- 增加了程序的复杂性,理解更加困难。