Design Patterns - Command Pattern

Il modello di comando è un modello di progettazione basato sui dati e rientra nella categoria del modello comportamentale. Una richiesta viene inserita in un oggetto come comando e passata all'oggetto invoker. L'oggetto Invoker cerca l'oggetto appropriato in grado di gestire questo comando e passa il comando all'oggetto corrispondente che esegue il comando.

Implementazione

Abbiamo creato un'interfaccia Order che funge da comando. Abbiamo creato una classe Stock che funge da richiesta. Abbiamo classi di comando concrete BuyStock e SellStock che implementano l' interfaccia degli ordini che eseguirà l'effettiva elaborazione dei comandi. Viene creato un broker di classe che funge da oggetto invoker. Può prendere ed effettuare ordini.

L' oggetto Broker utilizza il modello di comando per identificare quale oggetto eseguirà il comando in base al tipo di comando. CommandPatternDemo , la nostra classe demo, utilizzerà la classe Broker per dimostrare il modello di comando.

Passo 1

Crea un'interfaccia di comando.

Order.java

public interface Order {
   void execute();
}

Passo 2

Crea una classe di richiesta.

Stock.java

public 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");
   }
}

Passaggio 3

Crea classi concrete che implementano l' interfaccia Order .

BuyStock.java

public class BuyStock implements Order {
   private Stock abcStock;

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

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

SellStock.java

public class SellStock implements Order {
   private Stock abcStock;

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

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

Passaggio 4

Crea la classe di invoker del comando.

Broker.java

import java.util.ArrayList;
import java.util.List;

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

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

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

Passaggio 5

Usa la classe Broker per prendere ed eseguire comandi.

CommandPatternDemo.java

public class CommandPatternDemo {
   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();
   }
}

Passaggio 6

Verifica l'output.

Stock [ Name: ABC, Quantity: 10 ] bought
Stock [ Name: ABC, Quantity: 10 ] sold