1. 类图
2. 角色
- Command(抽象命令类)
- ConcreteCommand(具体命令类)
- Invoker(调用者):请求的发送者,它通过命令对象来执行请求
- Receiver(接收者):真正执行命令的对象
- Client(客户端)
3. 代码
- 命令相关
- Command
-
//抽象命令类:抽象的命令,可以根据不同类型的命令写出不同的实现 public interface Command { void execute(); //调用命令 }
-
- ConcreteCommand
-
//具体命令类 class ConcreteCommand implements Command{ private Receiver receiver; //持有真正执行命令对象的引用 public ConcreteCommand(Receiver receiver) { super(); this.receiver = receiver; } @Override public void execute() { receiver.action(); //调用接收者执行命令的方法 } }
-
- Command
- 命令接收者Receiver
-
public class Receiver { //接收者:真正执行命令的对象 public void action(){ System.out.println("命令执行了......."); } }
-
- 命令发起者Invoker
-
public class Invoker { //请求者/调用者:发起执行命令请求的对象 private Command command; //持有命令对象的引用 public Invoker(Command command) { super(); this.command = command; } public void call(){ command.execute(); //请求者调用命令对象执行命令的那个execute方法 } }
-
- 客户端调用
-
public static void main(String[] args) { //通过请求者(invoker)调用命令对象(command),命令对象中调用了命令具体执行者(Receiver) Command command = new ConcreteCommand(new Receiver()); Invoker invoker = new Invoker(command); invoker.call(); }
-
4. 总结
receiver放到concreteCommand里面去,concreteCommand再放到invoker里面,最后调用invoker的方法执行
Receiver是真正执行命令的对象
优点:
- 封装了Command对象,实现了invoker和receiver的松耦合
缺点:
- 会导致具体命令类过多