請求傳送者與接收者解耦——命令模式(三)
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傳送http請求JavaHTTP
- Java傳送Post請求Java
- 傳送GET請求 示例
- SpringMVC中如何傳送GET請求、POST請求、PUT請求、DELETE請求。SpringMVCdelete
- 如何傳送請求以及AJAX
- python傳送HTTP POST請求PythonHTTP
- 使用Feign傳送HTTP請求HTTP
- Vue 使用 Axios 傳送請求的請求體問題VueiOS
- Postman傳送請求引數是Map格式的請求Postman
- Vue中封裝axios傳送請求Vue封裝iOS
- java傳送GET和post請求Java
- linux用curl傳送post請求Linux
- Python爬蟲(二)——傳送請求Python爬蟲
- nodejs使用request傳送http請求NodeJSHTTP
- axios傳送兩次請求原因及解決方法iOS
- Linux基礎命令---accept/reject 允許拒絕傳送列印請求Linux
- 在ASP.NET Core中用HttpClient(三)——傳送HTTP PATCH請求ASP.NETHTTPclient
- scrapy-redis原始碼解讀之傳送POST請求Redis原始碼
- vue中使用axios傳送ajax請求VueiOS
- react-fetch資料傳送請求React
- 首頁 使用axios 傳送ajax請求iOS
- 使用requests庫來傳送HTTP請求HTTP
- httprequest- post- get -傳送請求HTTP
- 使用Postman傳送POST請求的指南Postman
- java傳送get請求帶引數Java
- shell指令碼:批次傳送curl請求指令碼
- file_get_contents傳送post請求
- 以Raw的方式傳送POST請求
- jQuery裡如何使用ajax傳送請求jQuery
- RxHttp 一條鏈傳送請求之強大的Param類(三)HTTP
- 傳送 options 請求 後端返回 405 的解決過程後端
- 為何要在componentDidMount裡面傳送請求?
- postman(二):使用postman傳送get or post請求Postman
- 什麼時候會傳送options請求
- Go HTTP GET 請求可以傳送 body 嗎GoHTTP
- html頁面中如何傳送ajax請求HTML