命令模式

定义

命令模式将请求封装成对象,以便使用不同的请求,队列,或者日志来参
数化其他对象。命令模式也支持可撤销的操作。

模式结构

盗用一下UML图
命令模式一般结构

解释一下,命令模式一般有以下几个角色
1.client 客户类,即动作的请求者
2.receiver 动作的执行者,封装好事物的具体动作action
3.command <> 负责命令的执行,execute() 处理命令的逻辑,
必须实现。(ps 一般在构造器传入具体类,毕竟命令不创造类)
4.invoker 调用者,调用客户所需的command

模式实现

以书里的遥控器为例子
遥控器就是client,遥控器想要开灯,关灯,开电视。。。等等
或许以后还要扩展类。
按一般的实现,我会创建具体对象,灯对象,电视对象等等。。
然后在按钮上调用light.on()…
这看起来似乎可行,但代码的耦合度就很高了,以后要扩展代码
怎么办,比如加入开洗衣机按钮,那不仅要创建洗衣机类,还要
在遥控器类添加类,话要写方法。
还有按钮要让电扇高低档,电视换台呢。
所以说不要为了实现而写代码,还要考虑程序的扩展性,将变化从
代码里分离开。
这样看来,变化的是对象的执行方法不一样,不变的是我们对对象的
调用方法,我们只需要 遥控器.pressButton(),其他就交给命令
command.execute(),比如我们要开灯就调用具体实现类 openLightCommand.execute().

命令模式的优缺点

   1.将动作的请求者和动作的执行者分离开,降低了程序的耦合度  
   2.命令可以添加undo方法以支持撤销   常用于日志请求  
   3.但会产生很多command其他等类,管理麻烦  

总结

  命令模式还可支持队列请求,常用于日程安排,线程池,工作队列等。调用者调用  
  只需考虑什么时候调用即可  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值