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로써 동작하여 명령을 내리는데 사용된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | //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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /** * 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /** * Invoker class */ public class Broker { private List<order> orderList = new ArrayList<order>(); public void takeOrder(Order order){ orderList.add(order); } public void placeOrders(){ for ( Order o : orderList){ o.execute(); } orderList.clear(); } } </order></order> |
나머지
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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 |