命令模式(Command Pattern)是对命令的封装,每一个命令都是一个操作:请求方发出请求要求执行一个操作;接收方收到请求,并执行操作。命令模式解耦了请求方和接收方(通过ICommand),请求方只需请求执行命令,不用关心命令怎样被接收、怎样被操作及是否被执行等。命令模式属于行为型设计模式

在策略模式的基础上,把命令的执行者与请求者解耦
Receiver是具体的命令执行者,多数情况下无法抽象,如果能实现抽象相当于Commond和Receiver使用了桥接模式
public interface ICommand {void execute();}public class ConcreteCommand implements ICommand {private Receiver receiver;public ConcreteCommand(Receiver receiver) {this.receiver = receiver;}@Overridepublic void execute() {this.receiver.action();}}public class Receiver {public void action(){}}public class Invoker {private ICommand command;public Invoker(ICommand command) {this.command = command;}public void actiion(){this.command.execute();}}public class Client {public static void main(String[] args){Receiver receiver = new Receiver();Invoker invoker = new Invoker(new ConcreteCommand(receiver));invoker.actiion();}}
框架
JDK的Runnable接口,相当于抽象命令,调用start
优点
- 解耦命令请求与处理
- 命令易于扩展,符合开闭原则
- 支持组合命令
缺点
- 类膨胀
