디자인 패턴-명령 패턴

명령 패턴은 데이터 기반 설계 패턴이며 행동 패턴 범주에 속합니다. 요청은 명령으로 개체 아래에 래핑되고 호출자 개체에 전달됩니다. Invoker 개체는이 명령을 처리 할 수있는 적절한 개체를 찾고 명령을 실행하는 해당 개체에 명령을 전달합니다.

이행

명령 역할을 하는 인터페이스 Order 를 만들었습니다 . 요청 역할을하는 Stock 클래스를 만들었습니다 . 실제 명령 처리를 수행 할 Order 인터페이스를 구현하는 구체적인 명령 클래스 BuyStockSellStock이 있습니다. 호출자 객체 역할을하는 클래스 브로커 가 생성됩니다. 주문을 받고 주문할 수 있습니다.

브로커 개체는 명령 패턴을 사용하여 명령 유형에 따라 어떤 개체가 어떤 명령을 실행할지 식별합니다. 데모 클래스 인 CommandPatternDemoBroker 클래스를 사용 하여 명령 패턴을 보여줍니다.

1 단계

명령 인터페이스를 만듭니다.

Order.java

public interface Order {
   void execute();
}

2 단계

요청 클래스를 만듭니다.

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

3 단계

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

4 단계

명령 호출자 클래스를 만듭니다.

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

5 단계

Broker 클래스를 사용하여 명령을 수행하고 실행합니다.

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 단계

출력을 확인하십시오.

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