橘子味的心
标题:Java命令模式

命令模式是数据驱动设计模式,属于行为模式类别。 请求作为命令包装在一个对象下,并传递给调用器对象。 调用者对象查找可以处理此命令的适当对象,并将命令传递到执行命令的相应对象。

实现实例

在这个示例中,创建了一个作为命令的接口- Order,同时也创建了一个Stock类作为请求。 有具体的命令类BuyStockSellStock实现Order接口将做实际的命令处理。 将创建一个类Broker作为调用器对象。它可以接收和下订单。

Broker对象使用命令模式来标识哪个对象,并根据命令类型执行哪个命令。 CommandPatternDemo这是一个演示入口类,将使用Broker类演示命令模式。

命令模式的实现实例结构如下图中所示 -

第1步

创建一个命令接口。实现代码如下所示 -

Order.java

  1. public interface Order {
  2. void execute();
  3. }
  4. Java

第2步

创建一个请求对象
Stock.java

  1. public class Stock {
  2.  
  3. private String name = "ABC";
  4. private int quantity = 10;
  5.  
  6. public void buy(){
  7. System.out.println("Stock [ Name: "+name+",
  8. Quantity: " + quantity +" ] bought");
  9. }
  10. public void sell(){
  11. System.out.println("Stock [ Name: "+name+",
  12. Quantity: " + quantity +" ] sold");
  13. }
  14. }
  15. Java

第3步

创建实现Order接口的具体类。

BuyStock.java

  1. public class BuyStock implements Order {
  2. private Stock abcStock;
  3.  
  4. public BuyStock(Stock abcStock){
  5. this.abcStock = abcStock;
  6. }
  7.  
  8. public void execute() {
  9. abcStock.buy();
  10. }
  11. }
  12. Java

SellStock.java

  1. public class SellStock implements Order {
  2. private Stock abcStock;
  3.  
  4. public SellStock(Stock abcStock){
  5. this.abcStock = abcStock;
  6. }
  7.  
  8. public void execute() {
  9. abcStock.sell();
  10. }
  11. }
  12. Java

第4步

创建命令调用程序类。
Broker.java

  1. import java.util.ArrayList;
  2. import java.util.List;
  3.  
  4. public class Broker {
  5. private List<Order> orderList = new ArrayList<Order>();
  6.  
  7. public void takeOrder(Order order){
  8. orderList.add(order);
  9. }
  10.  
  11. public void placeOrders(){
  12.  
  13. for (Order order : orderList) {
  14. order.execute();
  15. }
  16. orderList.clear();
  17. }
  18. }
  19. Java

第5步

使用Broker类来接收和执行命令。
CommandPatternDemo.java

  1. public class CommandPatternDemo {
  2. public static void main(String[] args) {
  3. Stock abcStock = new Stock();
  4.  
  5. BuyStock buyStockOrder = new BuyStock(abcStock);
  6. SellStock sellStockOrder = new SellStock(abcStock);
  7.  
  8. Broker broker = new Broker();
  9. broker.takeOrder(buyStockOrder);
  10. broker.takeOrder(sellStockOrder);
  11.  
  12. broker.placeOrders();
  13. }
  14. }
  15. Java

第6步

验证输出,执行上面的代码得到以下结果 -

  1. Stock [ Name: ABC, Quantity: 10 ] bought
  2. Stock [ Name: ABC, Quantity: 10 ] sold
  3. Java