View
108
Download
2
Category
Preview:
Citation preview
PADRÃO COMMAND
João Paulo Paschoal
Arnaldo Correia
Eric Carvalho
DEFINIÇÃO
"Encapsular uma requisição como um objeto, permitindo que clientes parametrizem diferentes requisições, filas ou requisições de log, e suportar operações reversíveis." [GoF]
OBJETIVO
• Encapsular solicitações em um objeto e utilizar suas ações sem conhecer sua implementação;
• Possibilitar operações de fazer e desfazer;
• Geração de logs;
MOTIVAÇÃO
• Algumas vezes é necessário solicitar uma operação sem nenhum conhecimento de como esta será implementada;
• Podemos simplesmente não conhecer o objeto que vai receber a delegação para executar aquela operação;
MOTIVAÇÃO
• Imagine a situação de um item de menu: "colar" (Ctrl + V);o Ele não sabe a natureza da informação
que está na Área de Transferência;o Pode ser uma Imagem, um Texto, etc.
MOTIVAÇÃO
• Solução: encapsular esta tarefa num objeto (um Command) e através dele delegar esta tarefa para outra classe, que por sua vez sabe como executar a operação propriamente dita (o Receiver);
DIAGRAMA DE SEQUÊNCIA
CONSEQUÊNCIAS
• Promove o desacoplamento do objeto que solicita uma operação do objeto que vai realizar esta operação propriamente dita;
• Solicitações em alto nível: o objeto não precisa ter nenhum conhecimento sobre a implementação da operação;
CONSEQUÊNCIAS
• Encapsulamento do Comando em um Objeto, podendo portanto serem manipulados e refinados como tal;
DIAGRAMA DE CLASSE
PARTICIPANTES
• Command: Interface para execução de uma operação;
• ConcreteCommand: Vincula um objeto Receiver a uma ação e implementa os métodos abstratos da classe Command;
• Client: Cria um objeto ConcreteCommand e estabelece o seu Receiver;
PARTICIPANTES
• Invoker: Envia solicitações ao Command;
• Receiver: Implementa as ações que serão utilizadas pelo ConcreteCommand;
EXEMPLO REAL
• Observe o exemplo real:
• Trata-se de um “simulador” de carro de Formula 1;
• Um Piloto pode executar as ações “acionarPedal” e “mudarMarcha”;
• O Carro faz o papel do Invoker, gerenciando as ações do piloto;
EXEMPLO REAL
• Para as ações “acionarPedal” existem dois comandos: • AcelerarCommand, e • FreiarCommand;
• Para as ações de “mudarMarcha” existem dois comandos:• SubirMarcha, e • DescerMarcha;
EXEMPLO REAL
EXEMPLO REAL
• Piloto (Client)
•
EXEMPLO REAL
• Carro (Invoker)
EXEMPLO REAL
• Carro (Invoker) continuação…
EXEMPLO REAL
• AcelerarCommand (Concrete Command)
EXEMPLO REAL
• DescerMarchaCommand (Concrete Command)
EXEMPLO REAL
• Rodas (Receiver)
EXEMPLO REAL
• Cambio (Receiver)
EXEMPLO REAL
• Main (Dentro de Piloto)
EXEMPLO REAL
• Saída do Main
APLICAÇÕES
• Realizar operações de fazer e desfazer;• Realizar operações de log;• Reduzir acoplamento entre requisição e execução
de uma operação;• Projetar um sistema baseado em operações de alto
nível, como operações de transações;
PRÁTICA CALCULADORA
Esta atividade simula uma calculadora com duas operações possíveis: Multiplicação ou MultiplicaçãoPorSoma . A calculadora envia comandos diferentes de acordo com a operação selecionada, encapsulando as solicitações como objeto. Com base no exemplo demonstrado, e nas classes parcialmente fornecidas, implemente o que falta para o funcionamento da calculadora.
Recommended