sexta-feira, 13 de junho de 2008

AULA 23 e 24

PADRÃO COMMAND


Propósito:
Encapsular uma requisição como um objeto, permitindo que os clientes parametrizem diferentes requisições, filas ou fazer o registro de log de requisições e dar suporte operações que podem ser desfeitas.


Também conhecido como:
Action ou Transaction
Motivação:
As vezes precisamos executar uma operação sem se preocupar com qual objeto que vai realiza-la
ou simplesmente não conhecemos qual objeto vai receber a delegação para executar tal operação.
Em uma aplicação Client/Servidor geralmente temos o componente Menu que é composto de
vários itens. Cada item do menu eqüivale uma operação, como salvar um arquivo, ler arquivo,
apagar arquivo, selecionar a paleta de cores e etc..


Aplicação:
Use o padrão Command quando você precisa:
- Parametrizar objetos por uma ação a ser executada
- Especificar, enfileirar e executar solicitações em tempos diferentes. Um objeto Command
poder ter o ciclo de vida independente da requisição do cliente.
- Suporte para desfazer operações. A operação "execute" do Command, pode armazenar
estados para reverter seus efeitos no próprio comando. Basta acrescentar na interface
Command uma operação chamada "Unexecute", que terá a responsabilidade de desfazer a
operação realizada pelo "execute". Os comandos realizados podem ser armazenados em lista
histórica.
- Estruturar um sistema em torno de operações de alto nível, como transações por
exemplo. Uma transação encapsula um conjunto de mudanças nos dados. O padrão
Command provê uma maneira de modelar transações. O Command tem uma interface comum, assim podemos chamar todas as transações do mesmo jeito.
- Reduzir acoplamento entre as requisições dos clientes e o objetos que as executam.


Solução:
Implemente o padrão Command para encapsular as operações e reduzir o acoplamento entre as requisições e os objetos que as executam. Para facilitar implantação de novas operações e tornar mais simples a manutenção das operações.


Conseqüências:
O padrão Command tem as seguintes conseqüências:
- Comand reduz o acoplamento (dependência) entre o objeto que chama a operação e o objeto
que executa a operação.
- Command é objeto que pode ser estendido e manipulado por outros objetos
- É mais fácil de acrescentar novas operações ou novos comandos, pois você não tem que
mudar as classes existentes.

Nenhum comentário: