[Design Pattern] Command Pattern 簡單案例

Command Pattern, 即命令模式,把一個命令包裹在一個對象裏面,將命令對象傳遞給命令的執行方,屬於行爲類的設計模式java

 

下面是命令模式的一個簡單案例。設計模式

Stock 表明被操做的對象。Order 定義命令的接口,BuyStock, SellStock 是具體類,實現 Order 接口。Broker 是命令的執行方。CommandPatternDemo 演示命令模式。app

代碼實現ide

Order, 命令接口this

public interface Order {

    public void execute();
}

具體的命令類spa

public class BuyStock implements Order {

    private Stock stock;
    
    public BuyStock(Stock stock){
        this.stock = stock;
    }
    
    @Override
    public void execute() {
        stock.buy();
    }
}

 

public class SellStock implements Order {

    private Stock stock;
    
    public SellStock(Stock stock){
        this.stock = stock;
    }
    
    @Override
    public void execute() {
        stock.sell();
    }
}

Broker, 命令的執行者設計

import java.util.LinkedList;
import java.util.List;

public class Broker {
    
    private List<Order> orders = new LinkedList<>();
    
    public void takeOrder(Order order){
        orders.add(order);
    }
    
    public void placeOrders(){
        for (Order order : orders){
            order.execute();
        }
    }
}

演示命令模式code

public class CommandPatternDemo {

    public static void main(){
        Stock stock = new Stock("apple", 19);
        
        Order buyStock = new BuyStock(stock);
        Order sellStock = new SellStock(stock);
                
        Broker broker = new Broker();
        broker.takeOrder(buyStock);
        broker.takeOrder(sellStock);
        
        broker.placeOrders();
    }
}

 

考慮擴展性htm

須要新增一個命令操做時,如 FreezeStock:對象

1. 新增一個文件,實現 FreezeStock 類,使其實現 Order 接口。

2. 在 Stock 中添加 freeze 方法

3. 在客戶端中調用新增的 FreezeStock 對象,類實現命令。

便可實現新增操做的效果,無需修改命令執行方 Broker 的代碼。

 

參考資料

Design Patterns - Command Pattern, TutorialsPoint

相關文章
相關標籤/搜索