鍍金池/ 教程/ Java/ 請(qǐng)求發(fā)送者與接收者解耦——命令模式(三)
請(qǐng)求發(fā)送者與接收者解耦——命令模式(四)
對(duì)象間的聯(lián)動(dòng)——觀察者模式(三)
算法的封裝與切換——策略模式(三)
請(qǐng)求發(fā)送者與接收者解耦——命令模式(三)
遍歷聚合對(duì)象中的元素——迭代器模式(四)
請(qǐng)求的鏈?zhǔn)教幚怼氊?zé)鏈模式(二)
自定義語(yǔ)言的實(shí)現(xiàn)——解釋器模式(五)
操作復(fù)雜對(duì)象結(jié)構(gòu)——訪問(wèn)者模式(一)
處理對(duì)象的多種狀態(tài)及其相互轉(zhuǎn)換——狀態(tài)模式(一)
處理對(duì)象的多種狀態(tài)及其相互轉(zhuǎn)換——狀態(tài)模式(三)
操作復(fù)雜對(duì)象結(jié)構(gòu)——訪問(wèn)者模式(二)
協(xié)調(diào)多個(gè)對(duì)象之間的交互——中介者模式(二)
算法的封裝與切換——策略模式(四)
請(qǐng)求發(fā)送者與接收者解耦——命令模式(六)
撤銷功能的實(shí)現(xiàn)——備忘錄模式(二)
算法的封裝與切換——策略模式(一)
遍歷聚合對(duì)象中的元素——迭代器模式(五)
模板方法模式深度解析(三)
協(xié)調(diào)多個(gè)對(duì)象之間的交互——中介者模式(五)
自定義語(yǔ)言的實(shí)現(xiàn)——解釋器模式(三)
處理對(duì)象的多種狀態(tài)及其相互轉(zhuǎn)換——狀態(tài)模式(六)
遍歷聚合對(duì)象中的元素——迭代器模式(三)
操作復(fù)雜對(duì)象結(jié)構(gòu)——訪問(wèn)者模式(四)
遍歷聚合對(duì)象中的元素——迭代器模式(一)
算法的封裝與切換——策略模式(二)
請(qǐng)求的鏈?zhǔn)教幚怼氊?zé)鏈模式(一)
遍歷聚合對(duì)象中的元素——迭代器模式(二)
操作復(fù)雜對(duì)象結(jié)構(gòu)——訪問(wèn)者模式(三)
對(duì)象間的聯(lián)動(dòng)——觀察者模式(六)
對(duì)象間的聯(lián)動(dòng)——觀察者模式(五)
請(qǐng)求發(fā)送者與接收者解耦——命令模式(一)
自定義語(yǔ)言的實(shí)現(xiàn)——解釋器模式(六)
自定義語(yǔ)言的實(shí)現(xiàn)——解釋器模式(一)
模板方法模式深度解析(一)
撤銷功能的實(shí)現(xiàn)——備忘錄模式(一)
處理對(duì)象的多種狀態(tài)及其相互轉(zhuǎn)換——狀態(tài)模式(五)
請(qǐng)求的鏈?zhǔn)教幚怼氊?zé)鏈模式(三)
遍歷聚合對(duì)象中的元素——迭代器模式(六)
撤銷功能的實(shí)現(xiàn)——備忘錄模式(三)
處理對(duì)象的多種狀態(tài)及其相互轉(zhuǎn)換——狀態(tài)模式(四)
處理對(duì)象的多種狀態(tài)及其相互轉(zhuǎn)換——狀態(tài)模式(二)
協(xié)調(diào)多個(gè)對(duì)象之間的交互——中介者模式(四)
對(duì)象間的聯(lián)動(dòng)——觀察者模式(二)
請(qǐng)求發(fā)送者與接收者解耦——命令模式(二)
自定義語(yǔ)言的實(shí)現(xiàn)——解釋器模式(四)
對(duì)象間的聯(lián)動(dòng)——觀察者模式(四)
撤銷功能的實(shí)現(xiàn)——備忘錄模式(五)
自定義語(yǔ)言的實(shí)現(xiàn)——解釋器模式(二)
協(xié)調(diào)多個(gè)對(duì)象之間的交互——中介者模式(三)
協(xié)調(diào)多個(gè)對(duì)象之間的交互——中介者模式(一)
撤銷功能的實(shí)現(xiàn)——備忘錄模式(四)
模板方法模式深度解析(二)
撤銷功能的實(shí)現(xiàn)——備忘錄模式(五)
請(qǐng)求發(fā)送者與接收者解耦——命令模式(五)
請(qǐng)求的鏈?zhǔn)教幚怼氊?zé)鏈模式(四)

請(qǐng)求發(fā)送者與接收者解耦——命令模式(三)

命令隊(duì)列的實(shí)現(xiàn)

有時(shí)候我們需要將多個(gè)請(qǐng)求排隊(duì),當(dāng)一個(gè)請(qǐng)求發(fā)送者發(fā)送一個(gè)請(qǐng)求時(shí),將不止一個(gè)請(qǐng)求接收者產(chǎn)生響應(yīng),這些請(qǐng)求接收者將逐個(gè)執(zhí)行業(yè)務(wù)方法,完成對(duì)請(qǐng)求的處理。此時(shí),我們可以通過(guò)命令隊(duì)列來(lái)實(shí)現(xiàn)。

命令隊(duì)列的實(shí)現(xiàn)方法有多種形式,其中最常用、靈活性最好的一種方式是增加一個(gè) CommandQueue 類,由該類來(lái)負(fù)責(zé)存儲(chǔ)多個(gè)命令對(duì)象,而不同的命令對(duì)象可以對(duì)應(yīng)不同的請(qǐng)求接收者,CommandQueue 類的典型代碼如下所示:

import java.util.*;

class CommandQueue {
    //定義一個(gè)ArrayList來(lái)存儲(chǔ)命令隊(duì)列
    private ArrayList<Command> commands = new ArrayList<Command>();

    public void addCommand(Command command) {
        commands.add(command);
    }

    public void removeCommand(Command command) {
        commands.remove(command);
    }

    //循環(huán)調(diào)用每一個(gè)命令對(duì)象的execute()方法
    public void execute() {
        for (Object command : commands) {
            ((Command)command).execute();
        }
    }
}

在增加了命令隊(duì)列類 CommandQueue 以后,請(qǐng)求發(fā)送者類 Invoker 將針對(duì) CommandQueue 編程,代碼修改如下:

class Invoker {
    private CommandQueue commandQueue; //維持一個(gè)CommandQueue對(duì)象的引用

    //構(gòu)造注入
    public Invoker(CommandQueue commandQueue) {
        this. commandQueue = commandQueue;
    }

    //設(shè)值注入
    public void setCommandQueue(CommandQueue commandQueue) {
        this.commandQueue = commandQueue;
    }

    //調(diào)用CommandQueue類的execute()方法
    public void call() {
        commandQueue.execute();
    }
}

命令隊(duì)列與我們常說(shuō)的“批處理”有點(diǎn)類似。批處理,顧名思義,可以對(duì)一組對(duì)象(命令)進(jìn)行批量處理,當(dāng)一個(gè)發(fā)送者發(fā)送請(qǐng)求后,將有一系列接收者對(duì)請(qǐng)求作出響應(yīng),命令隊(duì)列可以用于設(shè)計(jì)批處理應(yīng)用程序,如果請(qǐng)求接收者的接收次序沒(méi)有嚴(yán)格的先后次序,我們還可以使用多線程技術(shù)來(lái)并發(fā)調(diào)用命令對(duì)象的 execute() 方法,從而提高程序的執(zhí)行效率。