将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作,这样可以实现请求的一方与调用的一方进行解耦,新的命令也可以很容易加入,无需改变已有的类
命令模式的组成
客户角色:创建一个具体命令对象,并确定其接收者
命令角色(Command):声明一个给所有具体命令类的抽象接口
具体命令角色(ConcreteCommand):负责调用接收者的相应操作,实现接收者与客户 之间的弱耦合
请求者角色(Invoker):负责调用命令对象,执行请求
接收者角色(Recevier):负责执行具体的请求
//命令请求的真正执行者
public class Receiver {
public void method() {
System.out.println("具体执行命令···");
}
}
public interface Command {
public void execute();
}
public class ConcreteCommand implements Command {
Receiver receiver; //接收者的引用
public ConcreteCommand(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void execute() { //封装请求者的请求
receiver.method(); //执行请求
}
}
public class Invoker {
Command command; //具体命令的引用
public Invoker(Command command){
this.command = command;
}
public void requestCommand(){ //让具体命令执行execute()方法
command.execute();
}
}
public class Application {
public static void main(String[] args) {
Receiver receiver = new Receiver(); //创建接收者
Command command = new ConcreteCommand(receiver); //创建具体命令并制定接收者
Invoker invoker = new Invoker(command); //创建接收者并发出命令
invoker.requestCommand();
}
}