命令模式 (Command Pattern)

将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。

import java.util.ArrayList;

public class Main {
    
    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();
    }
}

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

// 命令接口
interface Order {
    void execute();
}

class BuyStock implements Order {
    
    private Stock abcStock;
  
    public BuyStock(Stock abcStock) {
        this.abcStock = abcStock;
    }
  
    public void execute() {
        abcStock.buy();
    }
}
class SellStock implements Order {
    
    private Stock abcStock;
  
    public SellStock(Stock abcStock) {
        this.abcStock = abcStock;
    }
  
    public void execute() {
        abcStock.sell();
    }
}

class Broker {
    
    private ArrayList<Order> orderList = new ArrayList<>(); 
  
    public void takeOrder(Order order) {
        orderList.add(order);      
    }
  
    // 执行所有命令
    public void placeOrders() {
        for(Order order : orderList) {
           order.execute();
        }
        orderList.clear();
    }
}

 

posted @ 2022-04-26 15:56  HanselHuang  阅读(34)  评论(0编辑  收藏  举报