"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 명령

명령

2024-11-04에 게시됨
검색:753

명령 패턴은 요청이 객체 내부에 명령으로 래핑되고 해당 객체가 호출자에게 전달되는 동작 패턴 중 하나입니다. 그런 다음 호출자는 이 명령을 처리할 수 있는 적절한 객체를 찾습니다. 그리고 해당 객체에 명령을 전달하면 객체는 명령을 실행합니다.

이 역시 OCP의 견고한 원칙을 따릅니다.

주식 시장의 예를 들어보겠습니다. Stock은 매수 또는 매도 요청이고(명령), 이 Stock은 Order 아래에 래핑되고, 이 Order는 브로커(Invoker)에게 전송됩니다. ), 브로커는 주문을 분석하여 이것이 BuyOrder인지 SellOrder인지 결정하고 최종적으로 매수 또는 매도 주문이 수행됩니다(명령/요청 실행)

command

재고(요청)

public class Stock {
    private String name ;
    private int quantity;
    public Stock(String n, int q){
        this.name = n;
        this.quantity = q;
    }
    public void sell(){
        System.out.println("[Sell order of quantity "  quantity  " for stock " name  " has been performed]");
    }
    public void buy(){
        System.out.println("[Buy order of quantity "  quantity  " for stock " name  " has been performed]");
    }
}

주문(객체 내부에 명령으로 래핑된 요청)

public interface Order {
    public void execute();
}

구체적인 주문

public class BuyOrder implements Order {
    private Stock stock;
    public BuyOrder(Stock s){
        this.stock = s;
    }
    @Override
    public void execute(){
        stock.buy();
    }
}

public class SellOrder implements Order {
    private Stock stock;
    public SellOrder(Stock s){
        this.stock = s;
    }
    @Override
    public void execute(){
        stock.sell();
    }
}

브로커(명령/주문을 처리할 수 있는 적절한 개체를 선택하는 호출자)

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

public class Broker {
    List orders;
    public Broker(){
        orders = new ArrayList();
    }

    public void addOrder(Order e){
        orders.add(e);
    }

    public void placeOrder(){
        for(Order e : orders){
            e.execute();
        }
        orders.clear();// once all the orders are placed by the broker then, the list should be emptied
    }
}

기본

public class Main {
    public static void main(String args[]){
        //requests
        Stock stock = new Stock("TCS",20);
        Stock stock2 = new Stock("Infy",10);
        //requests wrapped inside object(order) as commands
        Order order1 = new BuyOrder(stock);
        Order order2 = new SellOrder(stock2);

        //order is sent to the broker 
        Broker broker = new Broker();
        broker.addOrder(order1);
        broker.addOrder(order2);

        //broker at runtime decides the appropriate Object for the reference Order
        //in other words the invokers decide which object is appropriate and can handle this command/Order
        broker.placeOrder();
    }
}

산출:

[Buy order of quantity 20 for stock TCS has been performed]
[Sell order of quantity 10 for stock Infy has been performed]

이 패턴의 핵심 포인트

  • OCP 및 SIP의 견고한 원칙을 따릅니다.
  • 런타임에 주문 유형이 알려집니다.
릴리스 선언문 이 글은 https://dev.to/prashantrmishra/command-p16?1에서 복제됩니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3