命令模式 (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 @   HanselHuang  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示