Modèles de conception - Modèle de commande

Le modèle de commande est un modèle de conception basé sur les données et relève de la catégorie de modèle comportemental. Une demande est encapsulée sous un objet en tant que commande et transmise à l'objet appelant. L'objet Invoker recherche l'objet approprié qui peut gérer cette commande et transmet la commande à l'objet correspondant qui exécute la commande.

la mise en oeuvre

Nous avons créé une interface Order qui agit comme une commande. Nous avons créé une classe Stock qui agit comme une requête. Nous avons des classes de commandes concrètes BuyStock et SellStock mise en œuvre ordre interface qui fera le traitement de commande réelle. Un courtier de classe est créé qui agit comme un objet invocateur. Il peut prendre et passer des commandes.

L' objet Broker utilise un modèle de commande pour identifier quel objet exécutera quelle commande en fonction du type de commande. CommandPatternDemo , notre classe de démonstration, utilisera la classe Broker pour démontrer le modèle de commande.

Étape 1

Créez une interface de commande.

Order.java

public interface Order {
   void execute();
}

Étape 2

Créez une classe de requête.

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

Étape 3

Créez des classes concrètes mettant en œuvre l' interface 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();
   }
}

Étape 4

Créez une classe d'invocateur de commande.

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();
   }
}

Étape 5

Utilisez la classe Broker pour prendre et exécuter des commandes.

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();
   }
}

Étape 6

Vérifiez la sortie.

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