首页 > 其他 > 详细

命令模式

时间:2014-03-11 18:56:53      阅读:518      评论:0      收藏:0      [点我收藏+]

定义

在软件系统中,“行为请求者”与“行为实现者”通常是紧耦合,即行为请求者直接调用行为实现者。这种紧耦合情况下,如果要对行为进行:记录、撤销/重做、事务等处理,非常苦难,因为很可能需要修改实现者的代码。

通过传送命令的方式将行为请求者与行为实现者解耦,这就是命令模式。

类结构图

bubuko.com,布布扣

Command:定义命令的接口,一般就是声明execute方法;

ConcreteCommand:命令接口的实现对象(命令对象),通常会有接收者,并用调用者的功能来完成命令要执行的操作;

Receiver:真正执行命令的对象;

Invoker:这是客户端真正出发命令并要求执行相应操作的地方,也就是说相当于使用命令对象的入口;这个对象负责持有命令对象,相当于一个中间服务器,负责接收和转发命令;

Client(Assembler):具体命令的创建者,并指定命令对象的接受者(Receiver),然后把创建的命令对象传给Invoker保存起来,这样真正的客户端调用invoker就可以执行指定命令了,并不是每次要执行某个命令都需要创建一个命令。另外,为了准确调用命令,在Invoker中每个命令应该是唯一的。和传统的客户端不同,因此理解为装配者可能更合适。

注意:命令模式中的解耦指的是Invoker和Receiver之间的解耦,而不是Client和Receiver之间的解耦。

协同图

bubuko.com,布布扣

1.  Client创建命令,并指定命令执行者;

2.  Client把命令传递给Invoker;Invoker把命令存储起来,因此可以重复使用,并不是每次执行某个命令都需要创建一个命令。为了准确调用,每个命令应该是唯一的

3.  Invoker负责调用Command的execute方法,command调用Receiver的行为完成命令执行;

缺点

使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用。

优点

Invoker可以存储很多的命令对象,而不用关心Receiver是谁,

实例

电视机遥控器:电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮,不同的按钮对应电视机的不同操作。

命令模式,布布扣,bubuko.com

命令模式

原文:http://blog.csdn.net/woxueliuyun/article/details/21010431

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!