设计模式之命令模式

来源:互联网 发布:php编译安装5.6.31 编辑:程序博客网 时间:2024/06/06 03:48

关于命令模式,其实,很简单,就是2个角色,谁发出命令,谁接受?

比如说,将军发出命令,告诉,给我炸了对面的桥,那么士兵,就接到命令,去执行,具体怎么做?

但是,有可能将军一个一个亲口,告诉,是哪个士兵,给我具体怎么做吗?

绝对不可能,那将军不累死,中间肯定有个传递信息的,他知道将军的命令。


这个例子,就很好的说明了,命令模式,也就是对请求和接受的解耦。使2者之间不直接接触。

还有个生活中的例子,比如,你在家看电视的过程。

那你想看电视,那你就是(命令发出者),那你总不能直接对的电视说,我想看电影频道吧?(假如你家电视那么先进,当我没说),这里电视就是(命令接受者),

而这个过程中,你需要一个遥控器,它负责具体的开电视,关电视,换频道之类的事情。遥控器(就是个中间人,他知道谁发的命令,也知道应该具体怎么做)。

看这个模式的图片


抽象命令类(Command): 声明执行操作的接口。调用接收者相应的操作,以实现执行的方法Execute。

具体命令类(ConcreteCommand): 创建一个具体命令对象并设定它的接收者。通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。 

调用者(Invoker): 要求该命令执行这个请求。通常会持有命令对象,可以持有很多的命令对象。

接收者(Receiver): 知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者,只要它能够实现命令要求实现的相应功能。 

客户类(Client): 创建具体的命令对象,并且设置命令对象的接收者。真正使用命令的客户端是从Invoker来触发执行。 

命令模式,很好的把命令的请求,和具体的实现进行了分离,从而实现了解耦。
关于命令模式用到的地方,太多了,比如,你word里面的菜单了,还有structs里面的action类等等。
想看具体代码的朝这里搓:http://zz563143188.iteye.com/blog/1847029

0 0
原创粉丝点击