请求发送者与接收者解耦——命令模式(三)

转载 2013年12月06日 12:04:36

4 命令队列的实现

       有时候我们需要将多个请求排队当一个请求发送者发送一个请求时,将不止一个请求接收者产生响应,这些请求接收者将逐个执行业务方法,完成对请求的处理。此时,我们可以通过命令队列来实现。

       命令队列的实现方法有多种形式,其中最常用、灵活性最好的一种方式是增加一个CommandQueue类,由该类来负责存储多个命令对象,而不同的命令对象可以对应不同的请求接收者,CommandQueue类的典型代码如下所示:

[java] view plaincopy
  1. import java.util.*;  
  2.   
  3. class CommandQueue {  
  4.     //定义一个ArrayList来存储命令队列  
  5.     private ArrayList<Command> commands = new ArrayList<Command>();  
  6.       
  7.     public void addCommand(Command command) {  
  8.         commands.add(command);  
  9.     }  
  10.       
  11.     public void removeCommand(Command command) {  
  12.         commands.remove(command);  
  13.     }  
  14.       
  15.     //循环调用每一个命令对象的execute()方法  
  16.     public void execute() {  
  17.         for (Object command : commands) {  
  18.             ((Command)command).execute();  
  19.         }  
  20.     }  
  21. }  

       在增加了命令队列类CommandQueue以后,请求发送者类Invoker将针对CommandQueue编程,代码修改如下:

[java] view plaincopy
  1. class Invoker {  
  2.     private CommandQueue commandQueue; //维持一个CommandQueue对象的引用  
  3.       
  4.     //构造注入  
  5.     public Invoker(CommandQueue commandQueue) {  
  6.         this. commandQueue = commandQueue;  
  7.     }  
  8.       
  9.     //设值注入  
  10.     public void setCommandQueue(CommandQueue commandQueue) {  
  11.         this.commandQueue = commandQueue;  
  12.     }  
  13.       
  14.     //调用CommandQueue类的execute()方法  
  15.     public void call() {  
  16.         commandQueue.execute();  
  17.     }  
  18. }  

       命令队列与我们常说的“批处理”有点类似。批处理,顾名思义,可以对一组对象(命令)进行批量处理,当一个发送者发送请求后,将有一系列接收者对请求作出响应,命令队列可以用于设计批处理应用程序,如果请求接收者的接收次序没有严格的先后次序,我们还可以使用多线程技术来并发调用命令对象的execute()方法,从而提高程序的执行效率。

【作者:刘伟   http://blog.csdn.net/lovelion

相关文章推荐

请求发送者与接收者解耦——命令模式(三)

4 命令队列的实现       有时候我们需要将多个请求排队,当一个请求发送者发送一个请求时,将不止一个请求接收者产生响应,这些请求接收者将逐个执行业务方法,完成对请求的处理。此时,我们可以通过命令队...

请求发送者与接收者解耦——命令模式(Command Pattern)

一、前言 对于设计模式的了解是必不可少的,当然对于设计模式的应用那更是重要,可以说是否懂得应用设计模式在项目中是衡量一个程序员的技术水平,因为对于一个功能的实现,高级工程师和初级工程师一样都会实现,...

请求发送者与接收者解耦——命令模式

本文转载自 :http://blog.csdn.net/lovelion/article/details/8796736 装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制...

请求发送者与接收者解耦——命令模式

转:http://blog.csdn.net/lovelion/article/details/8796736
  • lynchyo
  • lynchyo
  • 2014年08月25日 14:24
  • 382

请求发送者与接收者解耦——命令模式(四)

5 撤销操作的实现       在命令模式中,我们可以通过调用一个命令对象的execute()方法来实现对请求的处理,如果需要撤销(Undo)请求,可通过在命令类中增加一个逆向操作来实现。扩展除了通过...

请求发送者与接收者解耦——命令模式(二)

3 完整解决方案        为了降低功能键与功能处理类之间的耦合度,让用户可以自定义每一个功能键的功能,Sunny软件公司开发人员使用命令模式来设计“自定义功能键”模块,其核心结构如图4所示...

请求发送者与接收者解耦——命令模式(二)

3 完整解决方案       为了降低功能键与功能处理类之间的耦合度,让用户可以自定义每一个功能键的功能,Sunny软件公司开发人员使用命令模式来设计“自定义功能键”模块,其核心结构如图4所示: 图4...

请求发送者与接收者解耦——命令模式(五)

6 请求日志       请求日志就是将请求的历史记录保存下来,通常以日志文件(Log File)的形式永久存储在计算机中。很多系统都提供了日志文件,例如Windows日志文件、Oracle日志文件等...

C++设计模式10--命令模式(二)(Command)--降低请求发送者与接收者耦合

工作了一天感觉好累,洗了个澡,打开电视看看有没有喜欢的节目,拿起遥控器,看着上面的按钮,忽然感觉好奇妙,我们按一开机键,电视就开了,然后...哈哈,真好玩,我按我按。细想之下这不就是一个命令模式么。 ...
  • gatieme
  • gatieme
  • 2014年01月09日 16:40
  • 18647

C++设计模式10--命令模式(一)--降低请求发送者与接收者耦合

命令模式概述 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何...
  • gatieme
  • gatieme
  • 2014年01月09日 16:23
  • 19048
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:请求发送者与接收者解耦——命令模式(三)
举报原因:
原因补充:

(最多只允许输入30个字)