把命令请求和命令执行解耦,关键是抽象出Command接口。
// 命令模式
public class Test7 {
public static void main(String[] args) {
// 客户端负责指定命令的接受者
Command c1 = new ConcreteCommand(new ConcreteReceiver1());
// 请求者
Invoker invoker = new Invoker(c1);
// 执行命令
invoker.runCommand();
Command c2 = new ConcreteCommand(new ConcreteReceiver2());
invoker.setCommand(c2);
invoker.runCommand();
}
}
// 命令请求者。持有命令的集合。
class Invoker {
private Command c;
public Invoker(Command c) {
this.c = c;
}
public void setCommand(Command c) {
this.c = c;
}
public void runCommand() {
c.execute();
}
}
interface Command {
void execute();
}
// 在命令对象里面封装了命令执行者即Receiver
// 命令对象本身不执行具体的操作,而是交给Receiver去执行
abstract class AbstractCommand implements Command {
private Receiver receiver;
public AbstractCommand (Receiver receiver) {
this.receiver = receiver;
}
public Receiver getReceiver() {
return receiver;
}
}
class ConcreteCommand extends AbstractCommand {
public ConcreteCommand (Receiver receiver) {
super(receiver);
}
public void execute(){
getReceiver().action();
}
}
// 命令接受者
interface Receiver {
// 业务方法
void action();
}
class ConcreteReceiver1 implements Receiver {
public void action() {
System.out.println("ConcreteReceiver1 action.... ");
}
}
class ConcreteReceiver2 implements Receiver {
public void action() {
System.out.println("ConcreteReceiver2 action.... ");
}
}
本文详细介绍了命令模式的基本概念,通过抽象Command接口将命令请求与命令执行进行解耦,展示了如何使用Invoker来持有命令集合并执行命令。通过实例代码说明了命令请求者如何指定命令接受者,并演示了命令模式在实际编程中的应用。
143

被折叠的 条评论
为什么被折叠?



