Java与设计模式(二十八)行为型--命令模式
一、概述
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
二、解决的问题
用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化。
三、模式中的角色
- 1、命令(Command)角色:定义命令的接口,声明执行的方法。
- 2、具体命令(ConcreteCommand)角色:命令接口实现对象,通常它会持有命令的接收者,通过调用接收者相应的功能方法来执行当前命令所要完成的操作。
- 3、接收者(Receiver)角色:真正执行命令的对象。任何类都可以成为一个接收者,只要它能够实现命令要求实现的相应功能即可。
- 4、请求者(Invoker)角色:要求命令对象执行相关请求的对象,通常会持有命令对象,可以是多个命令对象。这是客户端真正触发命令并要求命令执行相应操作的入口点。
- 5、客户端(Client)角色:创建具体的命令对象,并设置命令对象的接收者。注意,这里的客户端并不是我们通常所指的客户端,而是指组装命令和接收者的地方,把这个Client称为装配者或者意义会更明了,真正使用命令的客户端是从Invoker来触发执行的,而不是从这个Client端命令的调用。
四、模式解读
命令模式的类图如下所示
五、JDK涉及到的设计模式
六、模式总结
优点
- 1、降低了系统耦合度。
- 2、新的命令可以很容易添加到系统中去。
缺点
- 1、可能会导致系统具有过多的具体命令类
适用场景
- 1、对于大多数请求–响应模式的功能,比较适合使用命令模式,正如命令模式定义说的那样,命令模式对实现记录日志、撤销操作等功能比较方便。