java 请求队列_请求发送者与接收者解耦——命令模式(三):命令队列的实现...

4 命令队列的实现

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

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

import java.util.*;

class CommandQueue {

//定义一个ArrayList来存储命令队列

private ArrayList commands = new ArrayList();

public void addCommand(Command command) {

commands.add(command);

}

public void removeCommand(Command command) {

commands.remove(command);

}

//循环调用每一个命令对象的execute()方法

public void execute() {

for (Object command : commands) {

((Command)command).execute();

}

}

}

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

class Invoker {

private CommandQueue commandQueue; //维持一个CommandQueue对象的引用

//构造注入

public Invoker(CommandQueue commandQueue) {

this. commandQueue = commandQueue;

}

//设值注入

public void setCommandQueue(CommandQueue commandQueue) {

this.commandQueue = commandQueue;

}

//调用CommandQueue类的execute()方法

public void call() {

commandQueue.execute();

}

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值