"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > dominio

dominio

Publicado el 2024-11-04
Navegar:839

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)

command

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 {
    List orders;
    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

  • Sigue principios sólidos de OCP y SIP.
  • El tipo de orden se conoce en tiempo de ejecución
Declaración de liberación Este artículo se reproduce en: https://dev.to/prashantrmishra/command-p16?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

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