sábado, 21 de junho de 2008

Padrões GOF (Padrão Command)

Aulas 22 e 23

O objetivo do padrão command é 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.
Pra quem não está familiarizado com a maioria dos termos utilizados em java, ou nas linguagens orientada a objeto, vamos procurar entender da maneira mais simples. Encapsulamento para muitos se resume aos métodos get e set, que dá a idéia de proteger um objeto para que ele não seja acessado por qualquer um.
Mas a idéia transmitida pelo padrão command nada tem a ver com encapsulamento como proteção aos dados, mas sim com uma maneira de parametrizar as solicitações dos objetos de forma que estes não fiquem acoplados.
Um exemplo real do uso do padrão command pode ser visto na implementação de uma aplicação cliente/servidor onde 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.. Quando selecionamos um item do menu uma operação deve ser realizada. Esta operação pode ser encapsulada em um objeto, assim reduziremos o acoplamento entre o objeto menu e o objeto que executa a operação.
Quatro são os participantes na implementação do padrão command:
· Command: Classe abstrata ou interface para execuçãode uma operação.Deve implementar o método abstrato chamado execute.
· CommandAction: Classe concreta que implementa o método execute, ela deve ser uma subclasse se Command for uma classe abstrata, se Command for uma interface então ela deve realizar essa interface.
· Invoker: Objeto que faz uma requisição ao Command para que execute uma operação.
· Receiver: Objeto responsável por executar uma operação.
Abaixo seguem os diagramas de classe e de seqüência que explicam mais detalhadamente essa seqüência de mensagens.

Em tempo de execução o objeto Invoker chama o método execute() do objeto Command que delega ao método action() do objeto receiver que executará a operação.



Link: http://tramos.railsplayground.net/assets/2008/5/17/Padrao_20Projeto_20Command.pdf
http://pt.wikipedia.org/wiki/Command
http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/pat/command.htm


Nenhum comentário: