Java Command Pattern(命令行模式)

命令模式(Command Pattern)是一種數(shù)據(jù)驅(qū)動(dòng)的設(shè)計(jì)模式,它屬于行為型模式。請(qǐng)求以命令的形式包裹在對(duì)象中,并傳給調(diào)用對(duì)象。調(diào)用對(duì)象尋找可以處理該命令的合適的對(duì)象,并把該命令傳給相應(yīng)的對(duì)象,該對(duì)象執(zhí)行命令。

關(guān)鍵代碼:定義三個(gè)角色:1、received 真正的命令執(zhí)行對(duì)象 2、Command 3、invoker 使用命令對(duì)象的入口

優(yōu)點(diǎn): 1、降低了系統(tǒng)耦合度。 2、新的命令可以很容易添加到系統(tǒng)中去。
缺點(diǎn):使用命令模式可能會(huì)導(dǎo)致某些系統(tǒng)有過(guò)多的具體命令類(lèi)。

  1. 創(chuàng)建一個(gè)命令接口。
/**
 * 1. 創(chuàng)建一個(gè)命令接口。
 * @author mazaiting
 */
public interface Order {
    /**
     * 執(zhí)行
     */
    void execute();
}
  1. 創(chuàng)建一個(gè)請(qǐng)求類(lèi)。
/**
 * 2. 創(chuàng)建一個(gè)請(qǐng)求類(lèi)。
 * @author mazaiting
 */
public class Stock {

    private String name = "ABC";
    private int quantity = 10;
    
    public void buy(){
        System.out.println("Stock [ Name: "+name+", "
                + "Quantity: " + quantity +" ] bought");
    }
    
    public void sell(){
        System.out.println("Stock [ Name: "+name+", "
                + "Quantity: " + quantity +" ] sold");
    }
    
}
  1. 創(chuàng)建實(shí)現(xiàn)了 Order 接口的實(shí)體類(lèi)。
/**
 * 3. 創(chuàng)建實(shí)現(xiàn)了 Order 接口的實(shí)體類(lèi)。
 * @author mazaiting
 */
public class BuyStock implements Order{

    private Stock abcStock;
    
    public BuyStock(Stock abcStock){
        this.abcStock = abcStock;
    }
    
    public void execute() {
        abcStock.buy();
    }

}

/**
 * 3. 創(chuàng)建實(shí)現(xiàn)了 Order 接口的實(shí)體類(lèi)。
 * @author mazaiting
 */
public class SellStock implements Order{

    private Stock abcStock;
    
    public SellStock(Stock abcStock){
        this.abcStock = abcStock;
    }
    
    public void execute() {
        abcStock.sell();
    }

}
  1. 創(chuàng)建命令調(diào)用類(lèi)。
/**
 * 4. 創(chuàng)建命令調(diào)用類(lèi)。
 * @author mazaiting
 */
public class Broker {
    private List<Order> orderList = new ArrayList<Order>();
    
    /**
     * 添加命令
     */
    public void takeOrder(Order order) {
        orderList.add(order);
    }
    
    /**
     * 執(zhí)行并清空命令
     */
    public void placeOrders(){
        for (Order order : orderList) {
            order.execute();
        }
        orderList.clear();
    }
}
  1. 使用 Broker 類(lèi)來(lái)接受并執(zhí)行命令。
/**
 * 5. 使用 Broker 類(lèi)來(lái)接受并執(zhí)行命令。
 * @author mazaiting
 */
public class Client {
    public static void main(String[] args) {
        Stock abcStock = new Stock();
        
        BuyStock buyStockOrder = new BuyStock(abcStock);
        SellStock sellStockOrder = new SellStock(abcStock);
        
        Broker broker = new Broker();
        broker.takeOrder(buyStockOrder);
        broker.takeOrder(sellStockOrder);
        
        broker.placeOrders();       
    }
}
  1. 打印結(jié)果
Stock [ Name: ABC, Quantity: 10 ] bought
Stock [ Name: ABC, Quantity: 10 ] sold
最后編輯于
?著作權(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),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(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,887評(píng)論 1 59
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,544評(píng)論 19 139
  • 設(shè)計(jì)模式匯總 一、基礎(chǔ)知識(shí) 1. 設(shè)計(jì)模式概述 定義:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用、多...
    MinoyJet閱讀 4,081評(píng)論 1 15
  • 原文鏈接:http://blog.csdn.net/zhangerqing http://www.cnblogs....
    孤獨(dú)雜貨鋪閱讀 1,637評(píng)論 0 3
  • 事業(yè)工作中遇到困難,不要逃避,拖延,和放棄,要積極地想辦法,耐心地去解決。要相信是問(wèn)題只要面對(duì)去解決,總歸會(huì)得到一...
    xll2068閱讀 403評(píng)論 0 2

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