1. 程式人生 > >命令模式 -- 設計模式

命令模式 -- 設計模式

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();
    }

}

  

命令模式 -- 設計模式