设计模式之——命令模式(Command)
2011-11-29 16:16
169 查看
命令模式是将请求封装成对象,让调用者不需要关心请求的真正实现,从而实现面向接口编程。其类图如下
Command是一个抽象类,或接口,定义了一个execute接口;ConcreteCommand将接收者保存在里面,真正实现execute功能的是接收者。对于客户来说只要调用Invoker的SetCommand设定,之后调用execute就可以了。当然ConcreteCommand的功能是固定的,里面的接收者,以及对execute的实现都是不可变的。
对于命令模式,还是可以支持undo,和批量操作,只要记下操作的状态或设置一个command数组就可以了。
适用情况举例:开发一个万能遥控器,按下一个键对于不同的电器反应是不一样的,如对于电灯是打开,对于电视是静音,对于电脑是关机等等。当然电灯,电视,电脑的厂商(或是专门定制的商家)会提供API接口来完成这些功能,如果我们不用command模式,对于遥控器而言,每一下扩展都要修改很多代码(而且每个厂商的接口都不一致),并增加很多if,else代码。如果我们用command模式,把每个厂商的API都封住进Command,那么遥控器只要调用SetCommand设置一下,接下来的操作就是一样的,不用任何修改。而且SetCommand可以动态的设置多次。
个人理解命令模式的精髓是
1)把发出请求的对象 与 执行这些请求的对象分离开,我们可以创建一个命令对象,并设定接收者,然后放入队列,其他的函数或线程取出对象之后,调用一把execute方法就可以了,并不需要关心里面究竟做了些什么动作(这些动作是由命令里面的接收者完成的)
2)把各种接收者封装进入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,并提供统一的接口,就可以实现对接口编程,再增加接收者的时候不用修改客户程序代码
相关文章推荐
- 设计模式--命令模式(Command)
- 浅学设计模式之命令<command>模式
- 步步为营 .NET 设计模式学习笔记 九、Command(命令模式)
- PureMVC学习系列-从源码深度剖析PureMVC(从PureMVC中看设计模式-Command命令模式) .
- 设计模式--命令模式Command
- php设计模式 Command(命令模式)
- JAVA设计模式—命令模式(Command)
- 我所理解的设计模式(C++实现)——命令模式(Command Pattern)
- 设计模式学习笔记(十七)——Command命令模式
- 设计模式学习之命令模式(Command,行为型模式)(12)
- 设计模式(十四)----- 命令模式(Command)----(JAVA版)
- 设计模式 —— 命令模式(Command Pattern)
- 【Unity与23种设计模式】命令模式(Command)
- JAVA--命令模式(Command)--设计模式十八
- GOF23设计模式之命令模式(Command)的理解与实现
- 设计模式之命令模式(Command)
- 设计模式之十九:命令模式(Command)
- Java设计模式:命令模式(Command Pattern)
- 设计模式(18)-命令模式(Command)
- 设计模式笔记-Command命令模式