Java设计模式全集-命令模式(Command)

命令模式(Command)

命令模式的核心思想是将命令的发送者与命令的执行者进行了解耦,方便对二者进行扩展
其中有几个比较重点的角色
1.Command 即命令的接口或者抽象,所有的命令由其扩展
2.Receiver 命令的接收者,执行者,它负责对由Command扩展出来的命令做出具体的执行操作
3.ConcreteCommand 译成中文为–具体命令,由Command扩展而来,定义某个具体的命令,内部持有一个recevier对象,将Command和Receiver连接起来,起到一个桥梁作用,将具体的命令交给对应的命令接收者进行处理
4.Invoker 即命令的发送者,命令模式的方法入口,内部持有Command对象
5.Client 通常来讲,还有一个client,但是个人觉得不太重要,它只是一个具体的调用者了
整个调用流程为 Invoker >Command(ConcreteCommand 为具体实现) >Receiver ,即由invoker发起命令,指定某个确定的命令,由命令将调用逻辑递交给具体的执行者。

UML

在这里插入图片描述

上代码

  • 命令抽象
/**
 * @author Xiaoyingge
 * @description
 * @date 2020/5/12 18:33
 */
public interface Command {

    void execute ();
}
  • 创建一个唤醒jarvis的命令
/**
 * @author Xiaoyingge
 * @description
 * @date 2020/5/12 18:34
 */
public class WakeUpCommand implements Command {

    private Jarvis jarvis;

    public WakeUpCommand (Jarvis jarvis) {
        this.jarvis = jarvis;
    }

    @Override
    public void execute () {
        System.out.println("命令已确认,将由jarvis执行");
        jarvis.action();
    }
}
  • 创建执行人Jarvis
/**
 * @author Xiaoyingge
 * @description
 * @date 2020/5/12 18:34
 */
public class Jarvis {

    public void action () {
        System.out.println("Hello ,Sir !");
    }
}
  • 钢铁侠随身带的迷你耳机
/**
 * @author Xiaoyingge
 * @description
 * @date 2020/5/12 18:33
 */
public class Mic {

    private Command command;

    public Mic (Command command) {
        this.command = command;
    }

    public void invoke () {
        System.out.println("麦克风向远程服务器传输命令");
        command.execute();
    }
}
  • 妮妮本妮
/**
 * @author Xiaoyingge
 * @description
 * @date 2020/5/12 18:33
 */
public class TonyStark {

    public static void main (String[] args) {
        //创建命令的执行者
        Jarvis jarvis = new Jarvis();
        //创建一个唤醒命令,这个命令交给jarvis执行
        Command command = new WakeUpCommand(jarvis);
        //调用麦克风,把命令输入到麦克风里
        Mic invoker = new Mic(command);
        //麦克风唤醒远端的jarvis服务
        invoker.invoke();
    }
}

  • 执行结果
    在这里插入图片描述
原始定义代码实现
CommandCommand
ReceiverJarvis
ConcreteCommandWakeUpCommand
InvokerMic
ClientTonyStark
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值