Java Design Pattern - Command Pattern

업데이트:

Design Pattern

  • 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것이다.
  • 디자인 패턴은 알고리즘이 아니라 상황에 따라 자주 쓰이는 설계 방법을 정리한 코딩 방법론일 뿐이며 모든 상황의 해결책이 아니다.

Behavioral Patterns, 행위 패턴

  • 객체간의 상호작용과 책임을 중시하는 패턴이다.
  • 한 객체가 혼자 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분배하면서 객체 사이의 결합도를 최소화하는 것에 중점을 두는 패턴이다.

Command Pattern

  • 실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴이다.

Example

public interface Order {

  void execute();

}
  • 주식 주문을 수행하는 Order 인터페이스를 정의한다.
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");
  }

}
public class BuyStock implements Order {

  private Stock abcStock;

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

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

}
public class SellStock implements Order {

  private Stock abcStock;

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

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

}
  • ABC라는 임의 주식 정보와 사고 파는 기능을 포함한 Stock 객체를 구현한다.
  • 주식을 파는 BuyStock과 사는 SellStock 객체를 구현하여 Stock 객체의 기능을 활용하도록 처리한다.

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();
  }
}
  • Broker는 주어진 Order를 받고 수행을 하며, 사고 파는 행위에 대한 구분 없이 execute() 메서드만 호출한다.
public class CommandPatternMain {

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

}
  • 구매 브로커, 판매 브로커를 ABC 주식에 대한 Stock 객체를 주입하여 구현하고, Broker를 통해 사고 파는 행위를 진행하여 확인한다.

Source

Sample Code는 여기에서 확인 가능합니다.

댓글남기기