pattern2018. 7. 20. 17:25

Command pattern


-behavioral pattern에 속하며, data driven pattern이다.

-request는 command로 객체 안에 wrapping 되어 invoker 객체에 건내진다.

-invoker는 command를 다룰 수 있는 적절한 객체를 찾고 전달하여 command를 실행한다.


Order interface는 command로 사용하기 위해 만들어졌다.

Order는 command를 실제로 처리하는 역할

Stock은 request로써 만들어지며, Order에 wrapping된다.

Broker는 Invoker로써 동작하여 명령을 내리는데 사용된다.



Main 호출 부
	//make a request
	Stock abcStock=new Stock();
	//make commands
	Order buy = new BuyStock(abcStock);
	Order sell = new SellStock(abcStock);
	Broker broker =new Broker();

	//pass commands to invoker
	broker.takeOrder(buy);
	broker.takeOrder(sell);

	//execution
	broker.placeOrders();


Stock.java
/**
 * request class
 */
public class Stock {
    public static String TAG = "Stock";
    private String name ="ABC";
    private int quantity = 10;

    public void buy(){
        Log.d(TAG, "Stock [ Name: "+name+", Quantity: " + quantity +" ] bought");
    }
    public void sell(){
        Log.d(TAG, "Stock [ Name: "+name+", Quantity: " + quantity +" ] sold");
    }
}


Broker.java
/**
 * Invoker class
 */
public class Broker {
    private List  orderList = new ArrayList();

    public void takeOrder(Order order){
        orderList.add(order);
    }
    public void placeOrders(){

        for ( Order o : orderList){
            o.execute();
        }
        orderList.clear();
    }
}


나머지
public interface Order {
    void execute();
}

public class SellStock implements Order {

    private final Stock abcStock;

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

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

public class BuyStock implements Order {

    private final Stock abcStock;

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

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



결과:

07-20 17:22:27.275 16908 16908 D Stock   : Stock [ Name: ABC, Quantity: 10 ] bought

07-20 17:22:27.275 16908 16908 D Stock   : Stock [ Name: ABC, Quantity: 10 ] sold


출처 :

https://www.tutorialspoint.com/design_pattern/command_pattern.htm

'pattern' 카테고리의 다른 글

Iterator Pattern  (0) 2018.07.24
Interpreter pattern  (0) 2018.07.20
Chain of Responsibility Pattern  (0) 2018.07.20
Proxy Pattern  (0) 2018.07.20
Flyweight pattern  (0) 2018.07.20
Posted by easy16