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