命令模式

需求:一套智能家电(照明灯、风扇、冰箱、洗衣机),我们只需要在手机上安装app就可以控制这些家电工作。

我们希望只要一个app就可以控制所有的智能家电,则每个智能家电都要提供一个统一的接口给app调用,这时就可以考虑使用命令模式。
命令模式可将“动作的请求者”从“动作的执行者”对象中解耦出来。在例子中,动作请求者是app,动作执行者是每个家电。

1.基本介绍

  1. 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个
    我们只需要在程序运行时指定具体的接收者即可,此时可使用命令模式进行设计。
    (就比如将军指挥士兵进攻,但并不需要知道具体是哪个,士兵收到命令便会进攻)
  2. 命令模式使得请求发送者与请求接收者解耦
  3. 在命令模式中,会将一个请求封装为一个对象,以便使用不同参数来表示不同的请求。
  4. 角色:
    Invoker 调用者
    Receiver 被调用者
    MyCommand 命令,实现了Command接口,持有接收对象

2.类图

在这里插入图片描述

3.命令模式解决智能家居问题

限于篇幅,这里只用电灯举例。
在这里插入图片描述
命令接口,拥有execute()、undo()两个方法。

public interface Command {
   
    void execute();
    void undo();
}

在具体的命令类中,需要聚合对应的Receiver,编写LightReceiver类。

public class LightReceiver {
   
    public void on(){
   
        System.out.println("电灯打开了");
    }
    public void off(){
   
        System.out.println("电灯关闭了");
    }
}

在LightOnComman

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值