设计模式之命令模式

命令模式

假如你是一个程序员,你的老板让你实现一个遥控器,可以用来控制各种家电,例如电灯、风扇、热水器、音响设备和其他类似的可控制装置

最简单的方法:当按钮按下时,进行判断,如果按下的是电灯按钮,那么打开电灯、如果按下的是风扇按钮,那么打开风扇…

if(button == 电灯){
    打开电灯
}else if(button == 风扇){
    打开风扇
}else if(button == 热水器){
    打开热水器
}else if(button == 车库){
    打开车库
}

这样做会有两个缺点,一是你要让遥控器知道所有家电的打开方法,这已经是一件不太容易的事情了。二是你要写大量的if else语句,这样做及其不利于维护,每当新的家电要加载到遥控器中时,你都要去更改一遍代码,这样做没完没了

怎么解决这个问题呢,采用命令模式将”动作的请求者”从”动作的执行者“对象中解耦。添加一个中间的命令对象。

怎么理解呢,将遥控器按下,电灯打开,这一过程解耦

变为 遥控器按下某家电按钮,将该家电传入对应的命令对象 命令对象执行命令,家电打开

这样做的优点是:1.降低了系统耦合度。 2.当新的家电要加载时,我们只需要添加一个命令对象即可

​ 命令对象: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HzumPLng-1623166025573)(C:\Users\Administrator.DESKTOP-GE4QENT\AppData\Roaming\Typora\typora-user-images\image-20210608231748540.png)]

当遥控器按下电灯按钮时,遥控器执行:

  • 创建一个电灯对象
  • 执行电灯对象的execute()方法

这样便大大简化了遥控器的命令复杂度

将遥控器设为一个对象即:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZImmB9FL-1623166025575)(C:\Users\Administrator.DESKTOP-GE4QENT\AppData\Roaming\Typora\typora-user-images\image-20210608232511165.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值