명령 패턴은 요청이 객체 내부에 명령으로 래핑되고 해당 객체가 호출자에게 전달되는 동작 패턴 중 하나입니다. 그런 다음 호출자는 이 명령을 처리할 수 있는 적절한 객체를 찾습니다. 그리고 해당 객체에 명령을 전달하면 객체는 명령을 실행합니다.
이 역시 OCP의 견고한 원칙을 따릅니다.
주식 시장의 예를 들어보겠습니다. Stock은 매수 또는 매도 요청이고(명령), 이 Stock은 Order 아래에 래핑되고, 이 Order는 브로커(Invoker)에게 전송됩니다. ), 브로커는 주문을 분석하여 이것이 BuyOrder인지 SellOrder인지 결정하고 최종적으로 매수 또는 매도 주문이 수행됩니다(명령/요청 실행)
재고(요청)
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 { Listorders; 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]
이 패턴의 핵심 포인트
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3