命令模式

命令模式

 

分类:行为型设计模式

应用:消息队列


类似于银行排队操作业务,可以再柜台进行存钱、取钱等操作,但是一半人都比较多,需要排队等待操作。这个队列就是Broker,其中是你排队的队列,你可以选择当前柜台提供的服务:存钱、取钱等,然后操作员会执行你的命令。

这个设计模式也类似于我们平时所说的消息队列,你的Web-App同时再运行多个任务,不能马上完成你的任务,此时就需要进行任务队列,后台某个线程按照队列逐一执行相应的任务。


目录

命令模式

UML类图

创建命令接口

创建 命令实体类 Sell &Buy

创建任务队列 Broker

测试运行


UML类图

 

创建命令接口

Order

public interface Order {
    /**
     * 执行命令
     */
    void execute();
}

 

创建stock

public class Stock {
    private String name = "ABC";
    private int quality = 10;

    /**
     * 购买
     */
    public void buy(){
        System.out.printf("[Stock-%3d] %s Buy\n",quality,name);
    }

    /**
     * 售出
     */
    public void sell(){
        System.out.printf("[Stock-%3d] %s Sell\n",quality,name);
    }

}

 

创建 命令实体类 Sell &Buy

SellStock

public class SellStock implements Order{

    private Stock abcStock;

    public SellStock(Stock abcStock) {
        this.abcStock = abcStock;
    }

    @Override
    public void execute() {
        abcStock.sell();
    }
}

BuyStock

public class BuyStock implements Order{

    private Stock abcStock;

    public BuyStock(Stock abcStock) {
        this.abcStock = abcStock;
    }

    @Override
    public void execute() {
        abcStock.buy();
    }
}

 

创建任务队列 Broker

public class Broker {
    private List<Order> orderList = new ArrayList<>();

    public void takeOrder(Order order){
        orderList.add(order);
    }

    public void placeOrders(){
        for (Order order:orderList){
            order.execute();
        }
        orderList.clear();
    }
}

 

测试运行

public class ExecuteMain {
    public static void main(String[] args) {
        Stock stock = new Stock();

        BuyStock buyStock = new BuyStock(stock);
        SellStock sellStock = new SellStock(stock);

        Broker broker = new Broker();
        broker.takeOrder(buyStock);
        broker.takeOrder(sellStock);
        broker.placeOrders();
    }
}
[Stock- 10] ABC Buy
[Stock- 10] ABC Sell

Process finished with exit code 0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值