命令模式把一个请求或者操作封装到命令对象中,这些请求或者操作的内容包括接收者的信息,然后将该命令对象交由执行者执行,执行者不需要关心命令的接收人或者命令的具体内容,因为这些信息均被封装到命令对象中。
命令模式中涉及的角色及其作用如下:
命令接口(Command):声明执行操作的接口,
此接口中有一个执行命令的方法 execute(CommandReceiver receiver) 可见此方法的参数就是命令的接收者。而CommandReceiver 又是命令接受者的接口,实现了此接口的不同的命令具体接收者有选择地执行接口中的方法。
命令接口实现(ConcreteCommand):不同的命令接口实现类实现上面接口的execute方法,在方法中根据需要使命令接收者调用不同的方法。
命令请求者(Invoker):请求执行此次命令
命令接收人(Receiver):由命令接口的实现类来维护Receiver实例,并在命令执行时处理相应的任务。
下面是代码示例
命令接口
public interface Command {
/**
* 执行命令,参数为命令接收人
*/
void execute(CommandReceiver receiver);
}
/**
* 命令接收者接口,定义了不同的要实现的方法
*/
public interface CommandReceiver {
//命令执行者方法A
void doSomethingA();
//命令执行者方法B
void doSomethingB();
}
/**
* 命令请求执行者
* 其中的请求执行方法以Command接口的实现类为参数
*/
public class CommandExecutor {
public void execute(Command command) {
command.execute(new CommandReceiverImpl());
}
}
/**
* 命令实现类A,要求接收者实现对象调用A方法
*/
public class CommandA implements Command {
@Override
public void execute(CommandReceiver receiver) {
receiver.doSomethingA();
}
}
/**
* 命令实现类B,要求接收者对象执行方法B
*/
public class CommandB implements Command {
@Override
public void execute(CommandReceiver receiver) {
receiver.doSomethingB();
}
}
/**
* 命令接收者实现对象,定义了具体的方法要操作的内容
*/
public class CommandReceiverImpl implements CommandReceiver {
@Override
public void doSomethingA() {
System.out.println("doSomethingA");
}
@Override
public void doSomethingB() {
System.out.println("doSomethingB");
}
}
/**
* 调用客户端示例
*/
public class Client {
public static void main(String[] args) {
CommandExecutor executor=new CommandExecutor();
Command commandA=new CommandA();
executor.execute(commandA);
Command commandB=new CommandB();
executor.execute(commandB);
}
}









