鍍金池/ 教程/ Java/ Java命令模式
Java前端控制器模式
Java工廠設計模式
Java抽象工廠模式
Java觀察者模式
Java門面模式(或外觀模式)
Java備忘錄模式
Java MVC模式
Java單例模式
Java傳輸對象模式
Java迭代器模式
Java責任鏈模式
Java命令模式
Java原型模式
Java解釋器模式
Java適配器模式
Java狀態(tài)模式
Java中介者模式(Mediator Pattern)
Java攔截過濾器模式
Java策略模式
Java組合模式
Java業(yè)務代理模式
Java裝飾模式
Java模板模式
Java橋接模式
Java過濾器模式(條件模式)
Java享元模式(Flyweight Pattern)
Java建造者(Builder)模式
Java設計模式
Java空對象模式
Java數(shù)據(jù)訪問對象模式
Java訪問者模式
Java組合實體模式
Java服務定位器模式

Java命令模式

命令模式是數(shù)據(jù)驅(qū)動設計模式,屬于行為模式類別。 請求作為命令包裝在一個對象下,并傳遞給調(diào)用器對象。 調(diào)用者對象查找可以處理此命令的適當對象,并將命令傳遞到執(zhí)行命令的相應對象。

實現(xiàn)實例

在這個示例中,創(chuàng)建了一個作為命令的接口- Order,同時也創(chuàng)建了一個Stock類作為請求。 有具體的命令類BuyStockSellStock實現(xiàn)Order接口將做實際的命令處理。 將創(chuàng)建一個類Broker作為調(diào)用器對象。它可以接收和下訂單。

Broker對象使用命令模式來標識哪個對象,并根據(jù)命令類型執(zhí)行哪個命令。 CommandPatternDemo這是一個演示入口類,將使用Broker類演示命令模式。

命令模式的實現(xiàn)實例結(jié)構如下圖中所示 -

第1步

創(chuàng)建一個命令接口。實現(xiàn)代碼如下所示 -

Order.java

public interface Order {
   void execute();
}

第2步

創(chuàng)建一個請求對象
Stock.java

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");
   }
}

第3步

創(chuàng)建實現(xiàn)Order接口的具體類。

BuyStock.java

public class BuyStock implements Order {
   private Stock abcStock;

   public BuyStock(Stock abcStock){
      this.abcStock = abcStock;
   }

   public void execute() {
      abcStock.buy();
   }
}

SellStock.java

public class SellStock implements Order {
   private Stock abcStock;

   public SellStock(Stock abcStock){
      this.abcStock = abcStock;
   }

   public void execute() {
      abcStock.sell();
   }
}

第4步

創(chuàng)建命令調(diào)用程序類。
Broker.java

import java.util.ArrayList;
import java.util.List;

   public class Broker {
   private List<Order> orderList = new ArrayList<Order>(); 

   public void takeOrder(Order order){
      orderList.add(order);        
   }

   public void placeOrders(){

      for (Order order : orderList) {
         order.execute();
      }
      orderList.clear();
   }
}

第5步

使用Broker類來接收和執(zhí)行命令。
CommandPatternDemo.java

public class CommandPatternDemo {
   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();
   }
}

第6步

驗證輸出,執(zhí)行上面的代碼得到以下結(jié)果 -

Stock [ Name: ABC, Quantity: 10 ] bought
Stock [ Name: ABC, Quantity: 10 ] sold