El patrón de comando es uno de los patrones de comportamiento, donde una solicitud se incluye dentro de un objeto como comando y ese objeto se pasa a un invocador, el invocador luego busca un objeto apropiado que pueda manejar este comando y pasa el comando al objeto correspondiente, el objeto luego ejecuta el comando.
Esto también sigue el principio sólido de OCP
Tomemos un ejemplo del mercado de valores, donde Stock es una solicitud que debe comprarse o venderse (comando), este Stock se empaqueta bajo Orden, esta Orden luego se envía al corredor (Invoker ), el broker luego analiza la Orden para decidir si es BuyOrder o SellOrder y finalmente se realiza la orden de Compra o Venta (ejecución del comando/solicitud)
Stock (solicitud)
public class Stock { private String name ; private int quantity; public Stock(String n, int q){ this.name = n; this.quantity = q; } public void sell(){ System.out.println("[Sell order of quantity " quantity " for stock " name " has been performed]"); } public void buy(){ System.out.println("[Buy order of quantity " quantity " for stock " name " has been performed]"); } }
Orden (solicitud envuelta dentro de un objeto como un comando)
public interface Order { public void execute(); }
Pedidos concretos
public class BuyOrder implements Order { private Stock stock; public BuyOrder(Stock s){ this.stock = s; } @Override public void execute(){ stock.buy(); } } public class SellOrder implements Order { private Stock stock; public SellOrder(Stock s){ this.stock = s; } @Override public void execute(){ stock.sell(); } }
Agente (Invocador que elige el Objeto apropiado que puede manejar el comando/Orden)
import java.util.ArrayList; import java.util.List; public class Broker { Listorders; public Broker(){ orders = new ArrayList(); } public void addOrder(Order e){ orders.add(e); } public void placeOrder(){ for(Order e : orders){ e.execute(); } orders.clear();// once all the orders are placed by the broker then, the list should be emptied } }
Principal
public class Main { public static void main(String args[]){ //requests Stock stock = new Stock("TCS",20); Stock stock2 = new Stock("Infy",10); //requests wrapped inside object(order) as commands Order order1 = new BuyOrder(stock); Order order2 = new SellOrder(stock2); //order is sent to the broker Broker broker = new Broker(); broker.addOrder(order1); broker.addOrder(order2); //broker at runtime decides the appropriate Object for the reference Order //in other words the invokers decide which object is appropriate and can handle this command/Order broker.placeOrder(); } }
Producción:
[Buy order of quantity 20 for stock TCS has been performed] [Sell order of quantity 10 for stock Infy has been performed]
Puntos clave para este patrón
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3