设计模式——行为型模式_命令模式

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();    //调用接收者执行命令的方法
            }
        }
  • 命令接收者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的松耦合

缺点:

  • 会导致具体命令类过多

猜你喜欢

转载自blog.csdn.net/qq_41157876/article/details/111879835
今日推荐