http://rasimsen.com/index.php?title=Command_Design_Pattern&feed=atom&action=historyCommand Design Pattern - Revision history2024-03-28T08:43:57ZRevision history for this page on the wikiMediaWiki 1.31.1http://rasimsen.com/index.php?title=Command_Design_Pattern&diff=669&oldid=prevRasimsen: Created page with "Command pattern is a data driven design pattern and falls under behavioral pattern category. A request is wrapped under an object as command and passed to invoker object. Invo..."2018-09-19T20:42:32Z<p>Created page with "Command pattern is a data driven design pattern and falls under behavioral pattern category. A request is wrapped under an object as command and passed to invoker object. Invo..."</p>
<p><b>New page</b></p><div>Command pattern is a data driven design pattern and falls under behavioral pattern category. A request is wrapped under an object as command and passed to invoker object. Invoker object looks for the appropriate object which can handle this command and passes the command to the corresponding object which executes the command.<br />
<br />
=Implementation=<br />
We have created an interface Order which is acting as a command. We have created a Stock class which acts as a request. We have concrete command classes BuyStock and SellStock implementing Order interface which will do actual command processing. A class Broker is created which acts as an invoker object. It can take and place orders.<br />
<br />
Broker object uses command pattern to identify which object will execute which command based on the type of command. CommandPatternDemo, our demo class, will use Broker class to demonstrate command pattern.<br />
<br />
https://www.tutorialspoint.com/design_pattern/images/command_pattern_uml_diagram.jpg<br />
<br />
=Step 1=<br />
Create a command interface.<br />
<br />
Order.java<br />
<source><br />
public interface Order {<br />
void execute();<br />
}<br />
</source><br />
=Step 2=<br />
Create a request class.<br />
<br />
Stock.java<br />
<source><br />
public class Stock {<br />
<br />
private String name = "ABC";<br />
private int quantity = 10;<br />
<br />
public void buy(){<br />
System.out.println("Stock [ Name: "+name+", <br />
Quantity: " + quantity +" ] bought");<br />
}<br />
public void sell(){<br />
System.out.println("Stock [ Name: "+name+", <br />
Quantity: " + quantity +" ] sold");<br />
}<br />
}<br />
</source><br />
<br />
=Step 3=<br />
Create concrete classes implementing the Order interface.<br />
<br />
BuyStock.java<br />
<source><br />
public class BuyStock implements Order {<br />
private Stock abcStock;<br />
<br />
public BuyStock(Stock abcStock){<br />
this.abcStock = abcStock;<br />
}<br />
<br />
public void execute() {<br />
abcStock.buy();<br />
}<br />
}<br />
</source><br />
SellStock.java<br />
<source><br />
public class SellStock implements Order {<br />
private Stock abcStock;<br />
<br />
public SellStock(Stock abcStock){<br />
this.abcStock = abcStock;<br />
}<br />
<br />
public void execute() {<br />
abcStock.sell();<br />
}<br />
}<br />
</source><br />
<br />
=Step 4=<br />
Create command invoker class.<br />
<br />
Broker.java<br />
<source><br />
import java.util.ArrayList;<br />
import java.util.List;<br />
<br />
public class Broker {<br />
private List<Order> orderList = new ArrayList<Order>(); <br />
<br />
public void takeOrder(Order order){<br />
orderList.add(order); <br />
}<br />
<br />
public void placeOrders(){<br />
<br />
for (Order order : orderList) {<br />
order.execute();<br />
}<br />
orderList.clear();<br />
}<br />
}<br />
</source><br />
<br />
=Step 5=<br />
Use the Broker class to take and execute commands.<br />
<br />
CommandPatternDemo.java<br />
<source><br />
public class CommandPatternDemo {<br />
public static void main(String[] args) {<br />
Stock abcStock = new Stock();<br />
<br />
BuyStock buyStockOrder = new BuyStock(abcStock);<br />
SellStock sellStockOrder = new SellStock(abcStock);<br />
<br />
Broker broker = new Broker();<br />
broker.takeOrder(buyStockOrder);<br />
broker.takeOrder(sellStockOrder);<br />
<br />
broker.placeOrders();<br />
}<br />
}<br />
</source><br />
=Step 6=<br />
Verify the output.<br />
<source><br />
Stock [ Name: ABC, Quantity: 10 ] bought<br />
Stock [ Name: ABC, Quantity: 10 ] sold<br />
</source></div>Rasimsen