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로써 동작하여 명령을 내리는데 사용된다.
//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 ListorderList = 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 |