標籤:
Command Pattern, 即命令模式,把一個命令包裹在一個對象裡面,將命令對象傳遞給命令的執行方,屬於行為類的設計模式
下面是命令模式的一個簡單案例。
Stock 代表被操作的對象。Order 定義命令的介面,BuyStock, SellStock 是具體類,實現 Order 介面。Broker 是命令的執行方。CommandPatternDemo 示範命令模式。
代碼實現
Order, 命令介面
public interface Order { public void execute();}
具體的命令類
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(); } }}
示範命令模式
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(); }}
考慮擴充性
需要新增一個命令操作時,如 FreezeStock:
1. 新增一個檔案,實現 FreezeStock 類,使其實現 Order 介面。
2. 在 Stock 中添加 freeze 方法
3. 在用戶端中調用新增的 FreezeStock 對象,類實現命令。
即可實現新增操作的效果,無需修改命令執行方 Broker 的代碼。
參考資料
Design Patterns - Command Pattern, TutorialsPoint
[Design Pattern] Command Pattern 簡單案例