命令模式 -- 設計模式
阿新 • • 發佈:2019-04-02
comm pattern ring com lac void imp java 模式
命令模式(Command Pattern)是一種數據驅動的設計模式,它屬於行為型模式。
思考: 由Broker來接收命令和執行命令, 客戶端只負責構造命令, 這裏比較簡單
package day0321.CommandPattern; import java.util.ArrayList; import java.util.List; public class Demo{ public static void main(String[] args){ Stock stock = new Stock("萬科基金", 200); Stock alistock = new Stock("阿裏基金", 546); Stock east = new Stock("東方財富網", 500); Stock orderedSameColor = new Stock("同花順", 500); Stock cn = new Stock("中信證券", 500); // 找到一個代理 Broker broker = new Broker(); // 添加一些命令 broker.takeOrder(new SellStock(alistock)); broker.takeOrder(new SellStock(east)); broker.takeOrder(new SellStock(orderedSameColor)); broker.takeOrder(new SellStock(cn)); broker.takeOrder(new BuyStock(stock)); broker.placeOrder(); } } interface Order{ void execute(); } class Stock{ String name = "ABC"; int quantity = 10; public Stock(String name, int quantity){ this.name = name; this.quantity = quantity; } public Stock(){ } public String getName(){ return name; } public void setName(String name){ this.name = name; } public int getQuantity(){ return quantity; } public void setQuantity(int quantity){ this.quantity = quantity; } public void buy(){ String template = "Bought %d %s Stocks%n"; System.out.printf(template, quantity, name); } public void sell(){ String template = "Sold %d %s Stocks%n"; System.out.printf(template, quantity, name); } } // Order class BuyStock implements Order{ Stock stock; public BuyStock(Stock stock){ this.stock = stock; } @Override public void execute(){ stock.buy(); } } // Order class SellStock implements Order{ Stock stock; public SellStock(Stock stock){ this.stock = stock; } @Override public void execute(){ stock.sell(); } } class Broker{ List<Order> orders = new ArrayList<>(); public void takeOrder(Order order){ orders.add(order); } public void placeOrder(){ for (Order order : orders) { order.execute(); } // 執行完之後就清空命令 orders.clear(); } }
命令模式 -- 設計模式