设计模式之——命令模式(Command)

命令模式是将请求封装成对象,让调用者不需要关心请求的真正实现,从而实现面向接口编程。其类图如下

Command是一个抽象类,或接口,定义了一个execute接口;ConcreteCommand将接收者保存在里面,真正实现execute功能的是接收者。对于客户来说只要调用Invoker的SetCommand设定,之后调用execute就可以了。当然ConcreteCommand的功能是固定的,里面的接收者,以及对execute的实现都是不可变的。


对于命令模式,还是可以支持undo,和批量操作,只要记下操作的状态或设置一个command数组就可以了。


适用情况举例:开发一个万能遥控器,按下一个键对于不同的电器反应是不一样的,如对于电灯是打开,对于电视是静音,对于电脑是关机等等。当然电灯,电视,电脑的厂商(或是专门定制的商家)会提供API接口来完成这些功能,如果我们不用command模式,对于遥控器而言,每一下扩展都要修改很多代码(而且每个厂商的接口都不一致),并增加很多if,else代码。如果我们用command模式,把每个厂商的API都封住进Command,那么遥控器只要调用SetCommand设置一下,接下来的操作就是一样的,不用任何修改。而且SetCommand可以动态的设置多次。


个人理解命令模式的精髓是

1)把发出请求的对象 与 执行这些请求的对象分离开,我们可以创建一个命令对象,并设定接收者,然后放入队列,其他的函数或线程取出对象之后,调用一把execute方法就可以了,并不需要关心里面究竟做了些什么动作(这些动作是由命令里面的接收者完成的)

2)把各种接收者封装进入command,并提供统一的接口,就可以实现对接口编程,再增加接收者的时候不用修改客户程序代码




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值