Tasarım Desenleri - Komut Deseni

Komut kalıbı, veriye dayalı bir tasarım kalıbıdır ve davranış kalıbı kategorisine girer. Bir istek, bir nesnenin altına komut olarak sarılır ve invoker nesnesine iletilir. Invoker nesnesi, bu komutu işleyebilecek uygun nesneyi arar ve komutu, komutu yürüten ilgili nesneye iletir.

Uygulama

Komut olarak hareket eden bir arayüz düzeni oluşturduk . Talep olarak hareket eden bir Stok sınıfı oluşturduk . Gerçek komut işlemeyi gerçekleştirecek Sipariş arayüzünü uygulayan BuyStock ve SellStock somut komut sınıflarımız var . Çağırıcı nesne olarak hareket eden bir sınıf Broker oluşturulur. Emir alabilir ve verebilir.

Broker nesnesi, komut türüne bağlı olarak hangi nesnenin hangi komutu yürüteceğini belirlemek için komut desenini kullanır. Demo sınıfımız olan CommandPatternDemo , komut modelini göstermek için Broker sınıfını kullanacaktır .

Aşama 1

Bir komut arayüzü oluşturun.

Order.java

public interface Order {
   void execute();
}

Adım 2

Bir istek sınıfı oluşturun.

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

Aşama 3

Sipariş arayüzünü uygulayarak somut sınıflar oluşturun .

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

4. adım

Komut çağırıcı sınıfı oluşturun.

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

Adım 5

Komutları almak ve yürütmek için Broker sınıfını kullanın.

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

6. Adım

Çıkışı doğrulayın.

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