Você está na página 1de 23

PADRO COMMAND

PADRO COMMAND
Command um padro de projeto
comportamental utilizado para melhorar o fluxo
da aplicao encapsulando as requisies feitas
como objetos.

No command no importante como os objetos


so chamados, pois todos os objetos so
parametrizados implementando uma interface
OO.
PROPSITO
Encapsular um pedido como um objeto, deste
modo deixando voc parametrizar os clientes com
diferentes pedidos, filas ou logs e suportar
operaes que podem ser desfeitas.
PADRO COMMAND
Conhecido tambm como:

Action (Ao).

Transaction (Transao).
UTILIZAO
O padro Command utilizado para gerenciar a
relao de uma solicitao com os objetos quando
h certa complexidade entre essas, isto , quando
h muitas requisies.

A utilizao desse padro tem por finalidade


encapsular um comando de modo que esse
comando possa ser utilizado em diversos objetos
(DEITEL, 2003).
UTILIZAO
Quando existe uma interface grfica onde existe
uma grande probabilidade de que o usurio faa
vrias solicitaes inevitvel o aumento da
complexidade.
EXEMPLO
Editor de Texto.

Necessidade de programar vrias vezes o mesmo


item.
EXEMPLO
Menus podem ser implementados facilmente com
os objetos Command.

Cada escolha em um menu uma instncia da


classe MenuItem.
EXEMPLO
EXEMPLO
A aplicao configura cada MenuItem com uma
instncia de uma subclasse concreta Command.

A subclasse Command guarda a resposta do


pedido e invoca uma ou mais operaes no
receptor.
EXEMPLO
ColarCommand suporta passar um texto da rea
de transferncia para dentro de um documento.
EXEMPLO
EXEMPLO
Algumas vezes um MenuItem precisa executar
uma sequencia de comandos.

Definir uma classe de MacroCommand


permitindo que um MenuItem executar nmeros
variados de comandos.
APLICABILIDADE
Use o pattern Command quando voc quer:

parametrizar objetos por uma ao a realizar,


como objetos MenuItem visto anteriormente.
Voc pode expressar tal parametrizao numa
linguagem procedural com uma funo Callback,
isto , uma funo que registrada em algum
lugar para ser chamada mais tarde.
APLICABILIDADE
Especificar, enfileirar e executar pedidos em
tempos diferentes. Se o receptor do pedido puder
ser representado de uma maneira independente
do address space (espao de endereamento),
ento voc pode transferir um objeto Command
desta requisio para um processo diferente e
completar l a solicitao.
APLICABILIDADE
Suportar undo (desfazer). A operao Execute do
Command pode armazenar o estado para reverter
seus efeitos no prprio comando. A interface
Command deve ter uma operao adicional
Unexecute que reverte os efeitos de uma
chamada prvia para Execute.
APLICABILIDADE
Estruturar um sistema em volta de operaes de
alto nvel construdas sobre operaes primitivas.
Tal estrutura, comum em sistemas de
informao que suportam transaes. Uma
transao encapsula um conjunto de alteraes
de dados.
PARTICIPANTES

Command declara uma


- interface para
executar uma operao.

ConcreteCommand (ColarCommand, AbrirCommand) -


Define um encadeamento entre um objeto receptor e uma
ao; Implementa Executar invocando operaes
correspondentes no receptor.
PARTICIPANTES
Client (Applicao) - Cria um objeto
ConcreteCommand e estabelece seu receptor.
Invoker (MenuItem) - Pergunta o comando para
realizar o pedido.
Receiver (Documento, Applicao) - Sabe como
realizar uma operao associada com o
cumprimento de um pedido. Qualquer classe pode
servir como receptor.
COLABORAES

O Client cria um objeto ConcreteCommand


especificando seu receptor.

Um objeto Invoker armazena o objeto


ConcreteCommand.

O objeto ConcreteCommand invoca operaes nos seus


receptores para cumprirem o pedido.
COLABORAES
O Invoker distribui uma solicitao chamando
Executar sobre o comando. Quando o comando
est pronto para voltar uma ao,
ConcreteCommand guarda o estado para voltar
para o comando anterior invocando Executar.
CONSEQUNCIAS
O uso do padro Command apresenta as seguintes
consequncias:

O Command separa o objeto que invoca a


operao daquele que sabe execut-la.

Commands so objetos de primeira classe. Eles


podem ser manipulados ou estendidos como
qualquer outro objeto.
CONSEQUNCIAS
Voc pode montar um comando composto a partir
de outros comandos. Um exemplo a classe
MacroCommand. Em geral, comandos compostos
so uma instncia do padro Command.

fcil adicionar novos comandos, porque voc


no precisa mudar as classes existentes.

Você também pode gostar