Java設計模式
Java工廠設計模式
Java抽象工廠模式
Java單例模式
Java建造者(Builder)模式
Java原型模式
Java適配器模式
Java橋接模式
Java過濾器模式(條件模式)
Java組合模式
Java裝飾模式
Java門面模式(或外觀模式)
Java享元模式(Flyweight Pattern)
Java責任鏈模式
Java命令模式
Java迭代器模式
Java中介者模式(Mediator Pattern)
Java解釋器模式
Java備忘錄模式
Java觀察者模式
Java狀態模式
Java空對象模式
Java策略模式
Java模板模式
Java訪問者模式
Java MVC模式
Java業務代理模式
Java組合實體模式
Java數據訪問對象模式
Java前端控制器模式
Java攔截過濾器模式
Java服務定位器模式
Java傳輸對象模式
Java命令模式
命令模式是數據驅動設計模式,屬於行爲模式類別。 請求作爲命令包裝在一個對象下,並傳遞給調用器對象。 調用者對象查找可以處理此命令的適當對象,並將命令傳遞到執行命令的相應對象。
實現實例
在這個示例中,創建了一個作爲命令的接口- Order
,同時也創建了一個Stock
類作爲請求。 有具體的命令類BuyStock
和SellStock
實現Order
接口將做實際的命令處理。 將創建一個類Broker
作爲調用器對象。它可以接收和下訂單。
Broker
對象使用命令模式來標識哪個對象,並根據命令類型執行哪個命令。 CommandPatternDemo
這是一個演示入口類,將使用Broker
類演示命令模式。
命令模式的實現實例結構如下圖中所示 -
第1步
創建一個命令接口。實現代碼如下所示 -
Order.java
public interface Order {
void execute();
}
第2步
創建一個請求對象
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步
創建實現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步
創建命令調用程序類。
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
類來接收和執行命令。
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步
驗證輸出,執行上面的代碼得到以下結果 -
Stock [ Name: ABC, Quantity: 10 ] bought
Stock [ Name: ABC, Quantity: 10 ] sold