JDK设计模式(十七)命令模式

1、概述

命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。

2、解决的问题

用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化。

3、模式中的角色

1、命令(Command)角色:定义命令的接口,声明执行的方法。
2、具体命令(ConcreteCommand)角色:命令接口实现对象,通常它会持有命令的接收者,通过调用接收者相应的功能方法来执行当前命令所要完成的操作。
3、接收者(Receiver)角色:真正执行命令的对象。任何类都可以成为一个接收者,只要它能够实现命令要求实现的相应功能即可。
4、请求者(Invoker)角色:要求命令对象执行相关请求的对象,通常会持有命令对象,可以是多个命令对象。这是客户端真正触发命令并要求命令执行相应操作的入口点。
5、客户端(Client)角色:创建具体的命令对象,并设置命令对象的接收者。注意,这里的客户端并不是我们通常所指的客户端,而是指组装命令和接收者的地方,把这个 Client 称为装配者或者意义会更明了,真正使用命令的客户端是从 Invoker 来触发执行的,而不是从这个 Client 端命令的调用。

4、模式解读

命令模式的类图如下所示
image.png

5、JDK 涉及到的设计模式

image.png

6、模式总结

优点

1、封装性很好
2、扩展性很好

缺点

1、可能会导致系统具有过多的具体命令类

适用场景

1、对于大多数请求-响应模式的功能,比较适合使用命令模式,正如命令模式定义说的那样,命令模式对实现记录日志、撤销操作等功能比较方便。

https://alicharles.oss-cn-hangzhou.aliyuncs.com/static/images/mp_qrcode.jpg
文章目录
  1. 1、概述
  2. 2、解决的问题
  3. 3、模式中的角色
  4. 4、模式解读
  5. 5、JDK 涉及到的设计模式
  6. 6、模式总结
    1. 优点
    2. 缺点
    3. 适用场景