设计模式 --- 命令模式

    命令模式,解耦了请求者和调用者。请求以命令的形式包裹在对象中,传给调用对象,调用对象负责构造和控制命令的执行。也就是请求者发出一个请求,但是不知道具体的执行者,也不知道具体的执行细节,只需要知道这个请求被执行了;执行者者只需要老老实实的干活就行了,不需要知道上游的具情信息。调用者则在接到请求后,只负责构造命令以及控制命令的执行,这样请求者和执行者就彻底的解耦了,任何一方不用依赖其他方,只需要专心做自己的事情。比如:比如“二营长把老子的意大利炮拉过来”,李云龙发出命令:把老子的意大利炮拉过来,二营长执行这个命令,具体怎么拉,团长不管。有三个主要的对象

  • 命令:持有接受对象
  • 接收者:具体的执行
  • 调用者:持有命令对象,特定时间点发布命令

实现

    首先声明一个命令,定义具体的方法

public interface Command {
    void execute();
}

    实现接口

public class GetCannonCommand implements Command {
    private Receiver receiver;

    public GetCannonCommand(Receiver receiver) {
        this.receiver = receiver;
    }

    @Override
    public void execute() {
        System.out.println("cmd execute");
        receiver.action();
    }
}

   接收者,具体的执行人:

public class Receiver {
    public void action(){
        System.out.println("get cannon");
    }
}

    调用者,发布命令:

public class Invoker {
    private Command command;//只有一个命令

    public Invoker(Command command) {
        this.command = command;
    }
    
    public void sendConmmad(){
        System.out.println("send cmd");
        command.execute();
    }
}

    测试:

    public static void main(String[] args){
        Receiver receiver = new Receiver();
        Invoker invoker = new Invoker(new GetCannonCommand(receiver));
        invoker.sendConmmad();
//        输出
//        send cmd
//        cmd execute
//        get cannon
    }

优缺点

  • 优点
    1. 降低了耦合度
    2. 新命令添加方便
  • 缺点
    1. 命令太多导致过度的命令类

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值