面试题答案
一键面试Receiver角色的作用
在Java命令模式中,Receiver角色负责执行实际的操作。命令对象(Command)通常持有Receiver的引用,当命令的执行方法被调用时,命令会将请求转发给Receiver,由Receiver完成具体的业务逻辑。这样做的好处是将命令的发起者(Invoker)与命令的执行者(Receiver)解耦,提高了系统的灵活性和可维护性。
代码示例
- 定义Receiver类
// Receiver类,负责具体的操作
class Receiver {
public void action() {
System.out.println("Receiver执行具体的操作");
}
}
- 定义Command接口及具体命令类
// Command接口
interface Command {
void execute();
}
// 具体的命令类,持有Receiver的引用
class ConcreteCommand implements Command {
private Receiver receiver;
public ConcreteCommand(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void execute() {
receiver.action();
}
}
- 定义Invoker类
// Invoker类,负责调用命令的执行方法
class Invoker {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void executeCommand() {
if (command != null) {
command.execute();
}
}
}
- 测试代码
public class CommandPatternDemo {
public static void main(String[] args) {
// 创建Receiver
Receiver receiver = new Receiver();
// 创建Command并关联Receiver
Command command = new ConcreteCommand(receiver);
// 创建Invoker并设置Command
Invoker invoker = new Invoker();
invoker.setCommand(command);
// 调用Invoker执行命令
invoker.executeCommand();
}
}
在上述代码中,Receiver
类的action
方法执行具体的业务操作。ConcreteCommand
类实现Command
接口,在execute
方法中调用Receiver
的action
方法。Invoker
类通过setCommand
方法接收命令,并在executeCommand
方法中执行命令。最终在main
方法中展示了整个命令模式的调用流程。