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 的代碼。
參考資料