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

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的松耦合

缺点:

  • 会导致具体命令类过多
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值