国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

行為型設計模式——命令模式

這篇具有很好參考價值的文章主要介紹了行為型設計模式——命令模式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

命令模式

日常生活中,我們出去吃飯都會遇到下面的場景。

行為型設計模式——命令模式,技術提升篇,設計模式,命令模式,Java命令模式,Java

定義: 將一個請求封裝為一個對象,使發(fā)出請求的責任和執(zhí)行請求的責任分割開。這樣兩者之間通過命令對象進行溝通,這樣方便將命令對象進行存儲、傳遞、調用、增加與管理。命令模式包含以下主要角色:

  • 抽象命令類(Command)角色: 定義命令的接口,聲明執(zhí)行的方法。
  • 具體命令(Concrete Command)角色:具體的命令,實現命令接口;通常會持有接收者,并調用接收者的功能來完成命令要執(zhí)行的操作。
  • 實現者/接收者(Receiver)角色: 接收者,真正執(zhí)行命令的對象。任何類都可能成為一個接收者,只要它能夠實現命令要求實現的相應功能。
  • 調用者/請求者(Invoker)角色: 要求命令對象執(zhí)行請求,通常會持有命令對象,可以持有很多的命令對象。這個是客戶端真正觸發(fā)命令并要求命令執(zhí)行相應操作的地方,也就是說相當于使用命令對象的入口。

案例實現

我們以一個美團外賣接單的例子來實現命令模式,假設你開了一家外賣飯店,角色有老板、廚師和接到的訂單(命令類),
將上面的案例用代碼實現,那我們就需要分析命令模式的角色在該案例中由誰來充當。

  • 老板: 就是調用者角色,由她來向后廚廚師發(fā)起做菜的命令。
  • 大廚: 就是接收者角色,真正命令執(zhí)行的對象。
  • 訂單: 命令,命令中就包含了訂單。

類圖如下:
行為型設計模式——命令模式,技術提升篇,設計模式,命令模式,Java命令模式,Java

代碼如下:

首先定義訂單類、接受者類(廚師):

// 訂單類
public class Order {
    // 訂單
    private long ID;
    // 用來存儲餐名并記錄份數
    private Map<String, Integer> foodDic = new HashMap<String, Integer>();

    public long getID() {
        return ID;
    }
    public void setID(long ID) {
        this.ID = ID;
    }
    public Map<String, Integer> getFoodDic() {
        return foodDic;
    }
    public void setFoodDic(String name, int num) {
        foodDic.put(name,num);
    }
}

// 廚師類
public class Chef {
    public void makeFood(int num,String foodName){
        System.out.println("已經做好"+num + "份" + foodName);
    }
}

然后定義命令接口并和它的具體實現:

// 命令接口
public interface Command {
    void execute(); // 命令執(zhí)行方法
}

// 具體訂單命令
public class OrderCommand implements Command{
    // 命令接受者對象
    private Chef receiver;
    private Order order;
    public OrderCommand(Chef receiver, Order order){
        this.receiver = receiver;
        this.order = order;
    }

    // 命令執(zhí)行方法:命令接受者處理命令 
    @Override
    public void execute() {
        System.out.println("訂單號:"+order.getID());
        Set<String> keys = order.getFoodDic().keySet();
        for (String key : keys) {
            receiver.makeFood(order.getFoodDic().get(key),key);
        }

        try {
            Thread.sleep(100);//停頓一下 模擬做飯的過程
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(order.getID() + "訂單的飯弄好了");
    }
}

最后定義命令發(fā)出者(老板)類:

public class Boss {
    private ArrayList<Command> commands;//老板美團可以接很多單,可以持有很多的命令對象

    public Boss() {
        commands = new ArrayList();
    }

    // 不斷接單
    public void setCommand(Command cmd){
        commands.add(cmd);
    }

    // 向后廚發(fā)出命令您有新的訂單,廚師開始執(zhí)行
    public void orderUp() {
        System.out.println("張師傅,該工作了,新訂單來了.......");
        for (int i = 0; i < commands.size(); i++) {
            Command cmd = commands.get(i);
            if (cmd != null) {
                cmd.execute();
            }
        }
    }
}

客戶類測試:

public class Main {
    public static void main(String[] args) {
        //創(chuàng)建2個order
        Order order1 = new Order();
        order1.setID(1);
        order1.getFoodDic().put("西紅柿雞蛋面",1);
        order1.getFoodDic().put("小杯可樂",2);

        Order order2 = new Order();
        order2.setID(3);
        order2.getFoodDic().put("尖椒肉絲蓋飯",1);
        order2.getFoodDic().put("小杯雪碧",1);

        //創(chuàng)建接收者
        Chef receiver=new Chef();
        //將訂單和接收者封裝成命令對象
        OrderCommand cmd1 = new OrderCommand(receiver, order1);
        OrderCommand cmd2 = new OrderCommand(receiver, order2);
        //創(chuàng)建調用者 Boss 向后廚師傅發(fā)出做飯命令
        Boss invoker = new Boss();
        invoker.setCommand(cmd1); // 接單
        invoker.setCommand(cmd2); // 接單
        //將訂單帶到柜臺 并向廚師喊 訂單來了
        invoker.orderUp();
    }
}

結果輸出:

張師傅,該工作了,新訂單來了…
訂單號:1
已經做好1份西紅柿雞蛋面
已經做好2份小杯可樂
1訂單的飯弄好了
訂單號:3
已經做好1份尖椒肉絲蓋飯
已經做好1份小杯雪碧
3訂單的飯弄好了

優(yōu)點

  • 降低系統(tǒng)的耦合度。命令模式能將調用操作的對象與實現該操作的對象解耦。
  • 增加或刪除命令非常方便。采用命令模式增加與刪除命令不會影響其他類,它滿足“開閉原則”,對擴展比較靈活。
  • 可以實現宏命令。命令模式可以與組合模式結合,將多個命令裝配成一個組合命令,即宏命令。
  • 方便實現 Undo 和 Redo 操作。命令模式可以與后面介紹的備忘錄模式結合,實現命令的撤銷與恢復。

缺點

  • 使用命令模式可能會導致某些系統(tǒng)有過多的具體命令類。
  • 系統(tǒng)結構更加復雜。

使用場景

  • 系統(tǒng)需要將請求調用者和請求接收者解耦,使得調用者和接收者不直接交互。
  • 系統(tǒng)需要在不同的時間指定請求、將請求排隊和執(zhí)行請求。
  • 系統(tǒng)需要支持命令的撤銷(Undo)操作和恢復(Redo)操作。

JDK源碼解析

Runable是一個典型命令模式,Runnable擔當命令的角色,Thread充當的是調用者,start方法就是其執(zhí)行方法。

參考內容

傳智播客設計模式相關筆記(主要)文章來源地址http://www.zghlxwxcb.cn/news/detail-798955.html

到了這里,關于行為型設計模式——命令模式的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【設計模式--行為型--命令模式】

    【設計模式--行為型--命令模式】

    定義 將一個請求封裝為一個對象,使發(fā)出請求的責任和執(zhí)行請求的責任分割開。這樣兩者之間通過命令對象進行溝通,這樣方便將命令對象進行存儲,傳遞,調用,增加與管理。 結構 抽象命令類(Command)角色:定義命令的接口,聲明執(zhí)行的方法。 具體命令(Concrete Command)

    2024年02月04日
    瀏覽(24)
  • 設計模式之命令模式【行為型模式】

    設計模式之命令模式【行為型模式】

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 學習的最大理由是想擺脫平庸,早一天就多一份人生的精彩;遲一天就多一天平庸的困擾。各位小伙伴,如果您: 想系統(tǒng)/深入學習某技術知識點… 一個人摸索學習很難堅持,想組團高效學習… 想寫博

    2024年02月01日
    瀏覽(24)
  • 設計模式—行為型模式之命令模式

    設計模式—行為型模式之命令模式

    命令(Command)模式:將一個請求封裝為一個對象,使發(fā)出請求的責任和執(zhí)行請求的責任分割開。這樣兩者之間通過命令對象進行溝通,這樣方便將命令對象進行儲存、傳遞、調用、增加與管理。 命令模式包含以下主要角色。 抽象命令類(Command)角色:聲明執(zhí)行命令的接口,

    2024年01月25日
    瀏覽(22)
  • 笨蛋學設計模式行為型模式-命令模式【19】

    8.6.1概念 ? 命令模式允許將請求封裝成一個對象(命令對象,包含執(zhí)行操作所需地所有信息),并將命令對象按照一定的順序存儲在隊列中,然后再逐一調用執(zhí)行,這些命令可以支持反向操作,進行撤銷和重做。這樣發(fā)送者就只需要觸發(fā)命令就可以完成操作,不需要知道接受者

    2024年01月23日
    瀏覽(24)
  • 設計模式(016)行為型之命令模式

    ????????命令模式,它將請求封裝成一個對象,從而允許客戶端參數化操作隊列、記錄請求日志、支持撤銷操作等。在命令模式中,有四個核心角色:命令接口(Command)、具體命令(ConcreteCommand)、調用者(Invoker)、接收者(Receiver)。 ① 命令接口(Command) :聲明了執(zhí)

    2024年04月11日
    瀏覽(23)
  • 【設計模式】第16節(jié):行為型模式之“命令模式”

    【設計模式】第16節(jié):行為型模式之“命令模式”

    命令模式:將請求(命令)封裝為一個對象,這樣可以使用不同的請求參數化其他對象(將不同請求依賴注入到其他對象),并且能夠支持請求(命令)的排隊執(zhí)行、記錄日志、撤銷等(附加控制)功能。 動作封裝 解耦發(fā)送者跟接受者 可擴展性 簡化和集中錯誤處理 支持撤

    2024年02月07日
    瀏覽(32)
  • 【設計模式|行為型】命令模式(Command Pattern)

    命令模式(Command Pattern)是一種行為設計模式,它將請求封裝為一個對象,以便在不同的請求者和接收者之間進行解耦、參數化和操作的隊列化。命令模式允許你將具體的請求封裝為對象,這些對象之間彼此獨立,并且可以用不同的請求對客戶端進行參數化。 結構 命令接口

    2024年02月15日
    瀏覽(27)
  • 掌握設計模式:深入了解命令模式的優(yōu)雅調度與行為解耦

    掌握設計模式:深入了解命令模式的優(yōu)雅調度與行為解耦

    命令模式是一種行為設計模式,其目的是將請求發(fā)送者和接收者解耦,從而允許發(fā)送者發(fā)送請求,而無需知道請求的具體處理方式。在命令模式中,請求被封裝為一個對象,這個對象包含了執(zhí)行請求所需的所有信息,包括調用方法、參數等。這樣,請求的發(fā)送者只需知道如何

    2024年01月25日
    瀏覽(25)
  • 《golang設計模式》第三部分·行為型模式-02-命令模式(Command)

    《golang設計模式》第三部分·行為型模式-02-命令模式(Command)

    命令模式(Command)將類的業(yè)務行為以對象的方式封裝,以便實現行為的參數化、撤銷或重做等需求。 非命令模式的困惑: 類的行為在運行時是以實例方法的形式調用的,當方法執(zhí)行完畢并返回后,方法棧將會消除;方法的運行狀態(tài)(主要指局部變量)保存在棧幀中,它會隨

    2024年02月07日
    瀏覽(24)
  • 【十五】設計模式~~~行為型模式~~~狀態(tài)模式(Java)

    【十五】設計模式~~~行為型模式~~~狀態(tài)模式(Java)

    【學習難度:★★★☆☆,使用頻率:★★★☆☆】 在很多情況下,一個對象的行為取決于一個或多個動態(tài)變化的屬性,這樣的屬性叫做狀態(tài),這樣的對象叫做有狀態(tài)的(stateful)對象,這樣的對象狀態(tài)是從事先定義好的一系列值中取出的。當一個這樣的對象與外部事件產生互

    2024年02月07日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包