zoukankan      html  css  js  c++  java
  • 请求发送者与接收者解耦—命令模式(三)

    4 命令队列的实现

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

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

    1. import java.util.*;  
    2.   
    3. class CommandQueue  
    4.     //定义一个ArrayList来存储命令队列  
    5.     private ArrayList commands new ArrayList();  
    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编程,代码修改如下:

    1. class Invoker  
    2.     private CommandQueue commandQueue; //维持一个CommandQueue对象的引用  
    3.       
    4.     //构造注入  
    5.     public Invoker(CommandQueue commandQueue)  
    6.         thiscommandQueue 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

  • 相关阅读:
    有关phpmailer的详细介绍及使用方法
    威盾解密
    PHP正则表达式验证是否含有中文
    php防止重复提交表单
    simplexml 对xml的增删改操作
    Javascript正则表达式完全学习手册
    利用JS做到隐藏div和显示div
    js控制div显示与隐藏
    后台登陆地址
    MVC 自定义路由
  • 原文地址:https://www.cnblogs.com/luckForever/p/7254885.html
Copyright © 2011-2022 走看看