Command merupakan salah satu bagian dari Behavioral Design Pattern, dimana ia mengumpulkan atau melakukan enkapsulasi sejumlah command kedalam sebuah object sehingga bisa melakukan pengurutan kepada klien yang meminta command terhadap object tersebut.
Struktur
Secara umum, struktur Command Pattern adalah sebagai berikut,
- Client - Object yang meminta dilakukannya operasi. Juga membentuk ConcreteCommand dan menyiapkan Receiver
- Command - Interface untuk mengeksekusi operasi
- Receiver - Object yang siap menerima operasi
- Invoker - Object yang menerima permintaan dari client
- ConcreteCommand - Penghubung command dan receiver
Gambar diatas merupakan contoh implementasi Command Pattern dalam menentukan urutan untuk pembelian dan penjualan saham. Pada kasus ini, Client akan membuat sejumlah permintaan untuk menjual atau membeli saham, oleh karena itu terdapat dua object yang bertindak sebagai ConcreteCommand (BuyStockOrder dan SellStockCommand). Permintaan tersebut akan diterima oleh Agent, maka dari itu ia bertindak selaku Invoker. Setelah permintaan diterima dan dikerjakan, Agent akan menaruh permintaan-permintaan tersebut kedalam StockTrade, maka dari sini bisa disimpulkan bahwa StockTrade berperan sebagai Receiver. Adapun permintaan (Order) itu sendiri berlaku sebagai Command.
Untuk implementasinya di Java, bisa dilihat pada bagian dibawah
public interface Order { public abstract void execute ( ); } // Receiver class. class StockTrade { public void buy() { System.out.println("You want to buy stocks"); } public void sell() { System.out.println("You want to sell stocks "); } } // Invoker. class Agent { private m_ordersQueue = new ArrayList(); public Agent() { } void placeOrder(Order order) { ordersQueue.addLast(order); order.execute(ordersQueue.getFirstAndRemove()); } } //ConcreteCommand Class. class BuyStockOrder implements Order { private StockTrade stock; public BuyStockOrder ( StockTrade st) { stock = st; } public void execute( ) { stock . buy( ); } } //ConcreteCommand Class. class SellStockOrder implements Order { private StockTrade stock; public SellStockOrder ( StockTrade st) { stock = st; } public void execute( ) { stock . sell( ); } } // Client public class Client { public static void main(String[] args) { StockTrade stock = new StockTrade(); BuyStockOrder bsc = new BuyStockOrder (stock); SellStockOrder ssc = new SellStockOrder (stock); Agent agent = new Agent(); agent.placeOrder(bsc); // Buy Shares agent.placeOrder(ssc); // Sell Shares } } //--example output-- //You want to buy stocks //You want to sell stocks |