`
runfeel
  • 浏览: 943708 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

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

分享到:
评论

相关推荐

    design-pattern-java.pdf

    命令模式-Command Pattern 请求发送者与接收者解耦——命令模式(一) 请求发送者与接收者解耦——命令模式(二) 请求发送者与接收者解耦——命令模式(三) 请求发送者与接收者解耦——命令模式(四) 请求发送者...

    c++-设计模式之命令模式(Command Pattern)

    命令模式通过将请求封装为对象,使得请求的发送者和接收者之间解耦。它提供了灵活的操作管理方式,支持可撤销操作、日志记录和宏命令等功能。在这个示例中,命令模式展示了如何通过遥控器对象控制灯的开启和关闭,...

    设计模式之命令模式

    总的来说,命令模式提供了一种方式,使得请求的发送者和接收者之间解耦,同时增强了系统的灵活性和可扩展性。通过这种方式,我们可以更加方便地管理和组织复杂的系统。在实际开发中,特别是在需要实现撤销操作或事务...

    Java设计模式课件命令模式.pptx

    命令模式是一种设计模式,属于对象行为型模式,其主要目的是将请求发送者和接收者解耦,使得两者之间没有直接的引用关系。这种模式通过引入命令对象,将一个请求封装成一个独立的对象,使得发送者只需关注如何发送...

    uml 文档 命令模式

    总结来说,命令模式通过引入命令对象,将请求的发送者与接收者解耦,增强了系统的灵活性和可扩展性。在Struts这样的Web框架中,这种模式使得我们可以更方便地管理和调度请求,同时也便于测试和维护。UML文档对于理解...

    [行为模式] head first 设计模式之命令模式(Command)

    命令模式的核心思想是将请求的发送者与接收者解耦。发送者不直接调用接收者的具体方法,而是通过命令对象来调用。这样,发送者和接收者之间就没有直接的依赖关系,可以独立变化。命令模式的关键在于定义一个命令接口...

    java 命令模式实例 (设计模式)

    总结一下,命令模式提供了一种方式来将请求封装为独立的对象,使得请求的发送者和接收者解耦。通过定义命令接口和具体命令类,我们可以轻松地添加新的命令,同时保持系统的灵活性和可扩展性。在Java中,命令模式是...

    设计模式_行为型_命令模式.md

    - 解耦调用者和接收者:命令模式将请求封装为对象,因此调用者不需要直接了解接收者的细节,降低了系统中各部分的耦合度。 - 支持撤销和重做操作:由于命令对象的历史状态可以被保存下来,因此可以实现命令的撤销和...

    设计模式之命令模式(Command Pattern)

    - **松耦合**:调用者与接收者之间的依赖关系被移除,调用者不再需要直接了解接收者的具体实现,只需要知道如何发送请求即可。 - **可扩展性**:添加新的命令只需创建新的具体命令类,不需修改原有系统。 - **可撤销...

    设计模式之命令模式源码示例

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在软件工程中,这种模式广泛应用在各种场景中,以提高代码的灵活...

    设计模式-命令模式

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在iOS开发中,命令模式尤其适用于处理事件驱动的编程场景,因为...

    命令模式.zip

    在C#编程中,命令模式常用于实现解耦发送者和接收者,提高代码的灵活性和可扩展性。 在"命令模式.zip"这个压缩包中,我们可能会找到以下几个关键部分: 1. **命令接口(Command Interface)**:这是所有具体命令类...

    23种设计模式(10)命令模式Java开发Java经验技巧

    1. **松耦合**:命令模式将请求者与接收者解耦,两者无需直接交互,降低了系统的复杂性。 2. **可扩展性**:添加新命令只需要实现新的具体命令类,无需修改已有代码。 3. **可撤销操作**:可以通过实现undo()方法来...

    设计模式--命令模式java例子

    命令模式的核心是将请求者(Invoker)与执行者(Receiver)解耦,通过引入命令(Command)接口和具体命令(Concrete Command)类来实现。在该模式中,有四个主要角色: 1. **命令(Command)接口**:定义了一个接收...

    Head First 设计模式 (六) 命令模式(Command pattern) C++实现

    总的来说,命令模式是设计模式中的重要一环,它通过封装请求行为,使得请求发送者和接收者解耦,提高了系统的灵活性和可维护性。在C++中,利用面向对象特性,我们可以方便地实现和应用这一模式。

    设计模式之Command(命令)模式

    1. **解耦**:命令模式将请求发送者与接收者解耦,两者无需直接交互,降低了系统的耦合度。 2. **可扩展性**:容易添加新的命令而不影响现有代码,符合开闭原则。 3. **支持撤销操作**:通过实现命令的`undo()`方法...

    命令模式代码demo

    命令模式的核心思想是解耦调用者(Client)与接收者(Receiver),通过引入命令(Command)接口作为两者之间的桥梁。调用者不再直接调用接收者的具体方法,而是创建一个实现了命令接口的对象,并将该对象传递给接收...

    JAVA责任链与命令模式

    - **解耦**: 请求发送者与接收者之间解耦。 - **可撤销操作**: 支持撤销和重做等复杂操作。 ##### 3.2 实现 下面通过一个简单的例子来了解命令模式的实现。 假设有一个简单的菜单系统,其中包含了一些按钮,每个...

Global site tag (gtag.js) - Google Analytics