Patrones de diseño: Command

Bienvenido o bienvenida a un tutorial más sobre patrones de diseño, esta vez hablaremos sobre el patrón Command.


El objetivo de este patrón es la encapsulación de una petición bajo un método. En este patron existe un comando, un invoker y un receiver.



Se crea una interfaz Order que actúa como comando, un Stock que realiza las solicitudes.


Los comandos de Buy y Sell concretos, y el Broker que actua como invoker.


Como vemos tanto Buy como Sell tienen inyectado el Stock en el constructor, de esta forma cuando el Broker reciba una petición solo ejecutará el método execute() de la clase Order y ya luego dependiendo si es venta o compra ejecutará el método correspondiente.


En el código se vería algo así:

public interface Order {
 void execute();
}
public class Stock {
 public void buy(){}
 public void sell(){}
}
public class BuyStock implements Order {
 private Stock abcStock;

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

 public void execute() {
      abcStock.buy();
   }
}
/**********************/
public class SellStock implements Order {
 private Stock abcStock;

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

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

public class Broker {
 private List<Order> orderList = new ArrayList<Order>(); 

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

 public void placeOrders(){
 for (Order order : orderList) {
         order.execute();
      }
      orderList.clear();
   }
}
public class Main {
 public static void main(String[] args) {
      Stock abcStock = new Stock();

      BuyStock buyStockOrder = new BuyStock(abcStock);

      SellStock sellStockOrder = new SellStock(abcStock);
      Broker broker = new Broker();
      broker.takeOrder(buyStockOrder);
      broker.takeOrder(sellStockOrder);

      broker.placeOrders();
   }
}

Como veis es bastante sencillo de entender, creamos un BuyStock, otro SellStock, y ambas implementan Order, por tanto el broker luego simplemente recorrer la lista de operaciones y las ejecuta y por debajo el patrón Command se encarga de decidir que va a ejecutar.


Espero que te haya gustado, nos vemos en la próxima :)



63 vistas

©2020 por Juanma Perez.