15、命令行模式(設(shè)計(jì)模式筆記)

一、介紹

  • 命令模式:將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而使我們可用不同的請(qǐng)求對(duì)客戶(hù)端進(jìn)行參數(shù)化;對(duì)請(qǐng)求排隊(duì)或者記錄請(qǐng)求記錄,以及支持可撤銷(xiāo)的操作。也稱(chēng)之為:動(dòng)作Action模式、事物Transaction模式

二、結(jié)構(gòu)

  • command抽象命令類(lèi)
  • ConcreteCommand具體命令類(lèi)
  • Invoker調(diào)用者/請(qǐng)求者
    • 請(qǐng)求的發(fā)送者,它通過(guò)命令對(duì)象來(lái)執(zhí)行請(qǐng)求。一個(gè)調(diào)用者并不需要在設(shè)計(jì)時(shí)確定其接受者,因此它只與抽象命令之間存在關(guān)聯(lián)。在程序運(yùn)行時(shí),將調(diào)用命令對(duì)象的execute(),間接調(diào)用接收者的相關(guān)操作。
  • Receiver接收者
    接收者執(zhí)行與請(qǐng)求相關(guān)的操作,具體實(shí)現(xiàn)對(duì)請(qǐng)求的業(yè)務(wù)處理。未抽象前,實(shí)際執(zhí)行操作內(nèi)容的對(duì)象
  • Client客戶(hù)類(lèi)
    在客戶(hù)類(lèi)中需要?jiǎng)?chuàng)建調(diào)用者對(duì)象、具體命令類(lèi)對(duì)象,在創(chuàng)建具體命令對(duì)象時(shí)指定對(duì)應(yīng)的接收者。發(fā)送者和接收者之間沒(méi)有直接關(guān)系,都通過(guò)命令對(duì)象間接調(diào)用。

三、實(shí)例

Receiver,java

package cn.itcast.day246.command;
//接收者
public class Receiver {
    public void action(){
        System.out.println("接收者執(zhí)行命令");
    }
}

Command.java

package cn.itcast.day246.command;
//命令處理的中轉(zhuǎn)接口
public interface Command {
    public void execute();// 這里是返回一個(gè)空,但是實(shí)際開(kāi)發(fā)中我們可以添加多個(gè)不同的方法
}

// 實(shí)際中轉(zhuǎn)類(lèi)
class ConcreteCommand implements Command {

    private Receiver receiver;// 命令的真正執(zhí)行者,當(dāng)然這里也可以使用一個(gè)容器來(lái)保存多個(gè)命令的接收者

    public ConcreteCommand(Receiver receiver) {
        this.receiver = receiver;
    }

    @Override
    public void execute() {
        // 調(diào)用前的相關(guān)處理
        //...
        
        receiver.action();
        
        // 調(diào)用前的相關(guān)處理
        //...
    }
}

Invoker.java

package cn.itcast.day246.command;
//命令的發(fā)起者
public class Invoker {
    private Command command;// 當(dāng)然這里我們也可以使用一個(gè)容器來(lái)保存多條命令

    public Invoker(Command command) {
        this.command = command;
    }
    
    //業(yè)務(wù)方法,用于調(diào)用命令類(lèi)的方法
    public void call() {
        // 調(diào)用前的相關(guān)處理
        // ...

        command.execute();

        // 調(diào)用后的相關(guān)處理
        // ...
    }
}

說(shuō)明:從上面可以看到,實(shí)際上命令處理類(lèi)實(shí)際上就相當(dāng)于一個(gè)中轉(zhuǎn)站,它從一個(gè)或者多個(gè)命令發(fā)出者(Invoker )接收到一條或多條命令,然后分別發(fā)送到一個(gè)或多個(gè)接收者(Receiver),當(dāng)然在接收到命令之后可以進(jìn)行相關(guān)的處理(這里可以進(jìn)行批處理),然后發(fā)送給接收者進(jìn)行處理。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1 場(chǎng)景問(wèn)題# 1.1 如何開(kāi)機(jī)## 估計(jì)有些朋友看到這個(gè)標(biāo)題會(huì)非常奇怪,電腦裝配好了,如何開(kāi)機(jī)?不就是按下啟動(dòng)按...
    七寸知架構(gòu)閱讀 2,857評(píng)論 1 59
  • 目錄 本文的結(jié)構(gòu)如下: 什么是命令模式 為什么要用該模式 模式的結(jié)構(gòu) 代碼示例 優(yōu)點(diǎn)和缺點(diǎn) 適用環(huán)境 模式應(yīng)用 總...
    w1992wishes閱讀 1,153評(píng)論 2 9
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,789評(píng)論 0 9
  • 工廠模式類(lèi)似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式。簡(jiǎn)單...
    舟漁行舟閱讀 7,854評(píng)論 2 17
  • Command Pattern Written by Tianyapiao 1.定義 將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)...
    天涯漂閱讀 1,053評(píng)論 0 3