java設(shè)計(jì)模式14(命令模式)

命令模式可以將請(qǐng)求發(fā)送者和請(qǐng)求接收者完全解耦,發(fā)送者與接收者之間沒有直接引用關(guān)系,發(fā)送請(qǐng)求的對(duì)象只需要知道如何發(fā)送請(qǐng)求,而不必知道如何完成請(qǐng)求。

命令模式的定義:將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而可用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化,對(duì)請(qǐng)求排隊(duì)或者記錄請(qǐng)求日志,以及支持可撤銷的操作。

命令模式的結(jié)構(gòu)與實(shí)現(xiàn):
1.Command(抽象命令類):抽象命令類一般是一個(gè)抽象類或接口,在其中聲明了用于執(zhí)行請(qǐng)求的方法,通過這些方法可以調(diào)用請(qǐng)求接收者的相關(guān)操作。

public abstract class Command {

    public abstract void execute();

}

2.ConcreteCommand(具體命令類):具體命令類是抽象命令類的子類,實(shí)現(xiàn)了在抽象命令類中聲明的方法,它對(duì)應(yīng)具體的接收者對(duì)象,將接收者對(duì)象的動(dòng)作綁定其中。

public class ConcreteCommand extends Command {
    
    private Receiver receiver;
    
    public  ConcreteCommand() {
        receiver=new Receiver();
    }

    @Override
    public void execute() {
        receiver.action();
    }

}

3.Invoker(調(diào)用者):調(diào)用者即請(qǐng)求發(fā)送者,它通過命令對(duì)象來執(zhí)行請(qǐng)求。一個(gè)調(diào)用者并不需要在設(shè)計(jì)時(shí)確定其接收者,因此它只與抽象命令類之間存在關(guān)聯(lián)關(guān)系。

public class Invoker {

    private Command command;
    
    public Invoker(Command command) {
        this.command=command;
    }
    
    public void setCommand(Command command) {
        this.command = command;
    }
    
    public void request() {
        //調(diào)用命令類中的方法
        command.execute();
    }
}

4.Receiver(接收者):接收者執(zhí)行與請(qǐng)求相關(guān)的操作,具體實(shí)現(xiàn)對(duì)請(qǐng)求的業(yè)務(wù)處理。

public class Receiver {
    
    public void action() {
        System.out.println("接收者調(diào)用具體業(yè)務(wù)!");
    }

}

5.Test:

public class Test {

    public static void main(String[] args) {
        ConcreteCommand command=new ConcreteCommand();
        Invoker invoker=new Invoker(command);
        //接收者調(diào)用具體業(yè)務(wù)!
        invoker.request();
    }
    
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 【學(xué)習(xí)難度:★★★☆☆,使用頻率:★★★★☆】直接出處:命令模式梳理和學(xué)習(xí):https://github.com/...
    BruceOuyang閱讀 937評(píng)論 0 3
  • 目錄 本文的結(jié)構(gòu)如下: 什么是命令模式 為什么要用該模式 模式的結(jié)構(gòu) 代碼示例 優(yōu)點(diǎn)和缺點(diǎn) 適用環(huán)境 模式應(yīng)用 總...
    w1992wishes閱讀 1,239評(píng)論 2 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,666評(píng)論 1 32
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 12,430評(píng)論 6 13
  • 子涵: 你是一個(gè)文靜,聽話的女孩子!你人緣很好!結(jié)交了許多好朋友,老師很喜歡你的字,字寫的特別的規(guī)范漂亮,在班里你...
    侯海霞閱讀 1,736評(píng)論 0 0

友情鏈接更多精彩內(nèi)容