public interface Order { void execute(); }
public class SellStock implements Order{ private Stock stock; public void setStock(Stock stock) {//订单中含有最终的执行者实例,这个是why?订单记录者在记录时就知道这个订单由谁前去执行,直接在这里赋值, this.stock = stock; } @Override public void execute() { stock.sell(); } } public class BuyStock implements Order{ private Stock stock; public void setStock(Stock stock) { this.stock = stock; } @Override public void execute() { stock.buy(); } } 请求的最终执行类,在订单类中使用它,并且最终通过它来执行股票的购买和挂牌出售
public class Stock { private String name = "XXX Stock"; private int quality = 10; public void buy() { System.out.println("buy stock "+name+",quality:"+quality); } public void sell() { System.out.println("sell stock "+name+",quality"+quality); } } 一个中间者,主要用来记录订单,并且通知执行者执行订单:
public class ExecutCommand { private List<Order> orders = new ArrayList<>(); public void addOrer(Order order) { orders.add(order); } public void placeOrder() { for (Order order : orders) { order.execute(); } orders.clear(); } } 在实例中使用这个命令: public static void main(String[] args) { ExecutCommand command = new ExecutCommand();//中间的传话筒,中间类 Stock stock = new Stock();//接收者,命令的执行者 BuyStock buyStock = new BuyStock();//命令, SellStock sellStock = new SellStock();//命令 buyStock.setStock(stock); sellStock.setStock(stock); command.addOrer(buyStock); command.addOrer(sellStock); command.placeOrder(); }
输出结果
buy stock XXX Stock,quality:10
sell stock XXX Stock,quality10
这就是一个简单的命令模式实现,虽然没有实现取消,添加的功能,但是这个取消添加是可能会有失败的情况存在的。包含三个部分,订单(命令),执行者(命令执行者),中间者(记录及通知执行)。订单是由中间者记录产生,然后分配给执行者,并通知执行者完成订单。