"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > comando

comando

Publicado em 2024-11-04
Navegar:764

O padrão de comando é um dos padrões comportamentais, onde uma solicitação é encapsulada dentro de um objeto como comando e esse objeto é passado para um invocador, o invocador então procura um objeto apropriado que possa lidar com este comando e passa o comando para o objeto correspondente, o objeto então executa o comando.

Isso também segue o princípio sólido do OCP

Vamos dar um exemplo do mercado de ações, onde Ação é uma solicitação que deve ser comprada ou vendida(comando), essa Ação é agrupada em Ordem, essa Ordem é então enviada para a corretora (Invoker ), a corretora então analisa a Ordem para decidir se esta é BuyOrder ou SellOrder e finalmente a ordem de Compra ou Venda é executada(execução do comando/solicitação)

command

Estoque (solicitação)

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]");
    }
}

Ordem (solicitação encapsulada dentro de um objeto como um 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();
    }
}

Broker(Invoker que escolhe o objeto apropriado que pode lidar com o comando/pedido)

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();
    }
}

Saída:

[Buy order of quantity 20 for stock TCS has been performed]
[Sell order of quantity 10 for stock Infy has been performed]

Pontos-chave para este padrão

  • Segue princípios sólidos de OCP e SIP.
  • O tipo de pedido é conhecido em tempo de execução
Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/prashantrmishra/command-p16?1 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3