原文鏈接
譯者 smallclover
但願對你們有所幫助。謝謝!(●'◡'●)java
命令模式是一種數據驅動的設計模式,屬於行爲型模式這一類。命令模式會將一個請求包裝成一個對象並以命令的方式傳遞給調用者對象。調用者對象會尋找合適的而且可以處理該命令的對象,而後把該命令傳遞給相應的對象處理。設計模式
咱們建立了一個Order接口,該接口表明一組命令。緊接着建立一個Stock類表明請求。建立具體的命令類 BuyStock和SellStock 實現Order接口,它們將會做爲具體的命令被處理。 Broker 表明調用者,它能得到而且發出命令。
Broker對象將經過命令模式來識別哪一種對象該執行哪一種命令。CommandPatternDemo,咱們的demo類,將使用Broker類來演示命令模式。this
建立命令接口。spa
Order.java設計
public interface Order { void execute(); }
建立一個請求類code
Stock.javahtm
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"); } }
建立具體類實現Order接口對象
BuyStock.javablog
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(); } }
建立命令調用者類
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(); } }
使用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(); } }
校驗輸出。
Stock [ Name: ABC, Quantity: 10 ] bought Stock [ Name: ABC, Quantity: 10 ] sold