命令模式
分类:行为型设计模式
应用:消息队列
类似于银行排队操作业务,可以再柜台进行存钱、取钱等操作,但是一半人都比较多,需要排队等待操作。这个队列就是Broker,其中是你排队的队列,你可以选择当前柜台提供的服务:存钱、取钱等,然后操作员会执行你的命令。
这个设计模式也类似于我们平时所说的消息队列,你的Web-App同时再运行多个任务,不能马上完成你的任务,此时就需要进行任务队列,后台某个线程按照队列逐一执行相应的任务。
目录
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