4 命令队列的实现
有时候我们需要将多个请求排队,当一个请求发送者发送一个请求时,将不止一个请求接收者产生响应,这些请求接收者将逐个执行业务方法,完成对请求的处理。此时,我们可以通过命令队列来实现。
命令队列的实现方法有多种形式,其中最常用、灵活性最好的一种方式是增加一个CommandQueue类,由该类来负责存储多个命令对象,而不同的命令对象可以对应不同的请求接收者,CommandQueue类的典型代码如下所示:
import java.util.*;
class CommandQueue {
//定义一个ArrayList来存储命令队列
private ArrayList<Command> commands = new ArrayList<Command>();
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 (Command command) {
this.commandQueue = commandQueue;
}
//调用CommandQueue类的execute()方法
public void call() {
commandQueue.execute();
}
}
命令队列与我们常说的“批处理”有点类似。批处理,顾名思义,可以对一组对象(命令)进行批量处理,当一个发送者发送请求后,将有一系列接收者对请求作出响应,命令队列可以用于设计批处理应用程序,如果请求接收者的接收次序没有严格的先后次序,我们还可以使用多线程技术来并发调用命令对象的execute()方法,从而提高程序的执行效率。
【作者:刘伟 http://blog.csdn.net/lovelion】
分享到:
相关推荐
命令模式-Command Pattern 请求发送者与接收者解耦——命令模式(一) 请求发送者与接收者解耦——命令模式(二) 请求发送者与接收者解耦——命令模式(三) 请求发送者与接收者解耦——命令模式(四) 请求发送者...
命令模式通过将请求封装为对象,使得请求的发送者和接收者之间解耦。它提供了灵活的操作管理方式,支持可撤销操作、日志记录和宏命令等功能。在这个示例中,命令模式展示了如何通过遥控器对象控制灯的开启和关闭,...
总的来说,命令模式提供了一种方式,使得请求的发送者和接收者之间解耦,同时增强了系统的灵活性和可扩展性。通过这种方式,我们可以更加方便地管理和组织复杂的系统。在实际开发中,特别是在需要实现撤销操作或事务...
命令模式是一种设计模式,属于对象行为型模式,其主要目的是将请求发送者和接收者解耦,使得两者之间没有直接的引用关系。这种模式通过引入命令对象,将一个请求封装成一个独立的对象,使得发送者只需关注如何发送...
总结来说,命令模式通过引入命令对象,将请求的发送者与接收者解耦,增强了系统的灵活性和可扩展性。在Struts这样的Web框架中,这种模式使得我们可以更方便地管理和调度请求,同时也便于测试和维护。UML文档对于理解...
命令模式的核心思想是将请求的发送者与接收者解耦。发送者不直接调用接收者的具体方法,而是通过命令对象来调用。这样,发送者和接收者之间就没有直接的依赖关系,可以独立变化。命令模式的关键在于定义一个命令接口...
总结一下,命令模式提供了一种方式来将请求封装为独立的对象,使得请求的发送者和接收者解耦。通过定义命令接口和具体命令类,我们可以轻松地添加新的命令,同时保持系统的灵活性和可扩展性。在Java中,命令模式是...
- 解耦调用者和接收者:命令模式将请求封装为对象,因此调用者不需要直接了解接收者的细节,降低了系统中各部分的耦合度。 - 支持撤销和重做操作:由于命令对象的历史状态可以被保存下来,因此可以实现命令的撤销和...
- **松耦合**:调用者与接收者之间的依赖关系被移除,调用者不再需要直接了解接收者的具体实现,只需要知道如何发送请求即可。 - **可扩展性**:添加新的命令只需创建新的具体命令类,不需修改原有系统。 - **可撤销...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在软件工程中,这种模式广泛应用在各种场景中,以提高代码的灵活...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在iOS开发中,命令模式尤其适用于处理事件驱动的编程场景,因为...
在C#编程中,命令模式常用于实现解耦发送者和接收者,提高代码的灵活性和可扩展性。 在"命令模式.zip"这个压缩包中,我们可能会找到以下几个关键部分: 1. **命令接口(Command Interface)**:这是所有具体命令类...
1. **松耦合**:命令模式将请求者与接收者解耦,两者无需直接交互,降低了系统的复杂性。 2. **可扩展性**:添加新命令只需要实现新的具体命令类,无需修改已有代码。 3. **可撤销操作**:可以通过实现undo()方法来...
命令模式的核心是将请求者(Invoker)与执行者(Receiver)解耦,通过引入命令(Command)接口和具体命令(Concrete Command)类来实现。在该模式中,有四个主要角色: 1. **命令(Command)接口**:定义了一个接收...
总的来说,命令模式是设计模式中的重要一环,它通过封装请求行为,使得请求发送者和接收者解耦,提高了系统的灵活性和可维护性。在C++中,利用面向对象特性,我们可以方便地实现和应用这一模式。
1. **解耦**:命令模式将请求发送者与接收者解耦,两者无需直接交互,降低了系统的耦合度。 2. **可扩展性**:容易添加新的命令而不影响现有代码,符合开闭原则。 3. **支持撤销操作**:通过实现命令的`undo()`方法...
命令模式的核心思想是解耦调用者(Client)与接收者(Receiver),通过引入命令(Command)接口作为两者之间的桥梁。调用者不再直接调用接收者的具体方法,而是创建一个实现了命令接口的对象,并将该对象传递给接收...
- **解耦**: 请求发送者与接收者之间解耦。 - **可撤销操作**: 支持撤销和重做等复杂操作。 ##### 3.2 实现 下面通过一个简单的例子来了解命令模式的实现。 假设有一个简单的菜单系统,其中包含了一些按钮,每个...