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.
Download

Apresentação ()