概念:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作
核心:容易地实现对请求的撤销和重做
容易设计一个命令队列
容易将命令记入日志
允许接受请求的一方决定是否要否决请求
新增新的具体命令类不影响其他类
最关键的是命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分割开

命令模式结构图

image.png

java代码:

  1. public class CommandTest {
  2. public static void main(String[] args) {
  3. Receiver receiver = new Receiver();
  4. Command command = new ConcreteCommand(receiver);
  5. Invoker invoker = new Invoker(command);
  6. invoker.NotifyAll();
  7. }
  8. }
  9. //服务员
  10. public class Invoker {
  11. Command command;
  12. public Invoker(Command command){
  13. this.command = command;
  14. }
  15. public void NotifyAll(){
  16. command.ExecuteCommand();
  17. }
  18. }
  19. //命令者
  20. public abstract class Command {
  21. Receiver receiver;
  22. public Command(Receiver receiver) {
  23. this.receiver = receiver;
  24. }
  25. public abstract void ExecuteCommand();
  26. }
  27. //命令者实现类
  28. public class ConcreteCommand extends Command {
  29. public ConcreteCommand(Receiver receiver) {
  30. super(receiver);
  31. }
  32. @Override
  33. public void ExecuteCommand() {
  34. receiver.Action();
  35. }
  36. }
  37. //执行者
  38. public class Receiver {
  39. public void Action(){
  40. System.out.println("执行请求A");
  41. }
  42. }