디자인 패턴-명령 패턴
명령 패턴은 데이터 기반 설계 패턴이며 행동 패턴 범주에 속합니다. 요청은 명령으로 개체 아래에 래핑되고 호출자 개체에 전달됩니다. Invoker 개체는이 명령을 처리 할 수있는 적절한 개체를 찾고 명령을 실행하는 해당 개체에 명령을 전달합니다.
이행
명령 역할을 하는 인터페이스 Order 를 만들었습니다 . 요청 역할을하는 Stock 클래스를 만들었습니다 . 실제 명령 처리를 수행 할 Order 인터페이스를 구현하는 구체적인 명령 클래스 BuyStock 및 SellStock이 있습니다. 호출자 객체 역할을하는 클래스 브로커 가 생성됩니다. 주문을 받고 주문할 수 있습니다.
브로커 개체는 명령 패턴을 사용하여 명령 유형에 따라 어떤 개체가 어떤 명령을 실행할지 식별합니다. 데모 클래스 인 CommandPatternDemo 는 Broker 클래스를 사용 하여 명령 패턴을 보여줍니다.
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