命令模式:
将请求封装成对象,这可以让你使用不同的请求、队列、或者日志请求来参数化其他对象。命令模式也可以支持撤销操作。
命令模式的结构:
命令模式有4个部分:
- 命令接口/抽象类:声明了一个给所有具体命令类的抽象接口。
- 具体命令类:实现命令接口/抽象类,负责调用接收者的相应操作。
- 请求者类:负责调用命令对象执行请求。
- 接收者类:负责接收一个请求,并具体实施和执行一个请求。
示例代码如下:
命令接口:命令接口只有一个抽象方法,就是执行方法。
public interface Command {
void execute();
}
具体命令类:具体命令类需要持有一个接收者对象的句柄,以通知接收者执行相应动作。
public class ConCommand implements Command {
//持有相应的接收者对象
private Receiver receiver;
public ConCommand(Receiver receiver){
this.receiver = receiver;
}
//实现接口中的方法
public void execute() {
//通常会转调接收者对象的相应方法,让接收者来真正执行功能
receiver.action();
}
}
请求者类:请求者类需要持有命令对象,方便让命令对象通知执行者执行相关动作。
public class Invoker {
//要持有命令对象
private Command command = null;
public Invoker(Command command){
this.command = command;
}
//此方法通知命令对象,让命令对象通知接收者执行相应操作
public void action(){
command.execute();
}
}
执行者类:
public class Receiver {
//真正要执行的动作
public void action(){ System.out.println("执行操作"); }
}
最后,来看一下命令模式是如何工作的:
public class Client {
public static void main(String[] args) {
//创建接收者
Receiver receiver = new Receiver();
//创建命令对象,设定它的接收者
Command command = new ConCommand(receiver);
//创建请求者,把命令对象设置进去
Invoker invoker = new Invoker(command);
//执行方法
invoker.action();
}
}