請求傳送者與接收者解耦——命令模式(三)
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(CommandQueue commandQueue) {
this.commandQueue = commandQueue;
}
//呼叫CommandQueue類的execute()方法
public void call() {
commandQueue.execute();
}
}
命令佇列與我們常說的“批處理”有點類似。批處理,顧名思義,可以對一組物件(命令)進行批量處理,當一個傳送者傳送請求後,將有一系列接收者對請求作出響應,命令佇列可以用於設計批處理應用程式,如果請求接收者的接收次序沒有嚴格的先後次序,我們還可以使用多執行緒技術來併發呼叫命令物件的execute()方法,從而提高程式的執行效率。
【作者:劉偉 http://blog.csdn.net/lovelion】
相關文章
- 請求傳送者與接收者解耦——命令模式(五)解耦模式
- 請求傳送者與接收者解耦——命令模式(二)解耦模式
- Java設計模式-16、命令模式-請求傳送者與接收者解耦Java設計模式解耦
- 命令模式-接收者與執行者解耦和模式解耦
- Postman傳送Post請求Postman
- Java傳送Post請求Java
- 傳送GET請求 示例
- HttpClient--傳送請求HTTPclient
- perl傳送http請求HTTP
- java傳送http請求JavaHTTP
- 請問命令模式裡面這個接收者角色有什麼用?模式
- 如何傳送請求以及AJAX
- C# 傳送POST請求C#
- 使用HttpClient傳送GET請求HTTPclient
- 使用httpclient傳送http請求HTTPclient
- SpringMVC中如何傳送GET請求、POST請求、PUT請求、DELETE請求。SpringMVCdelete
- Zttp 傳送 form params 請求 而非 JSON 請求ORMJSON
- 【轉】怎麼用PHP傳送HTTP請求(POST請求、GET請求)?PHPHTTP
- java傳送GET和post請求Java
- 使用Feign傳送HTTP請求HTTP
- python傳送HTTP POST請求PythonHTTP
- post 封裝Map 傳送請求封裝
- PHP傳送POST和GET請求PHP
- postman傳送請求使用篇(二)Postman
- Python傳送請求代tokenPython
- 用Fiddler 傳送post請求
- .net 後臺 傳送http請求HTTP
- 通過PowerShell傳送TCP請求TCP
- 使用C#傳送POST請求C#
- Postman傳送請求引數是Map格式的請求Postman
- java傳送post請求 ,請求資料放到body裡Java
- Vue 使用 Axios 傳送請求的請求體問題VueiOS
- 在ASP.NET Core中用HttpClient(三)——傳送HTTP PATCH請求ASP.NETHTTPclient
- linux用curl傳送post請求Linux
- 以Raw的方式傳送POST請求
- Python爬蟲(二)——傳送請求Python爬蟲
- Vue中封裝axios傳送請求Vue封裝iOS
- httprequest- post- get -傳送請求HTTP