Tip:
Highlight text to annotate it
X
Olá pessoal, tudo bem? iremos demonstrar agora
como funciona o padrão de projeto command e como ele deve ser implementado
Assim como os demais padrões, O command tem 4 elementos essenciais
tem um nome, tem um problema, tem uma solução e tem as consequências
o command é um padrão bem simples e muito utilizado
e tem como objetivo encapsular uma solicitação como um objetivo
E que permite parametrizar outros objetos com diferentes solicitações
enfileirar ou registrar solicitações e implementar recursos de cancelamento de operações
ou seja, o objetivo do padrão é transformar um método de uma classe em um objeto
o qual pode executar a ação deste método
em algumas bibliografias vocês podem encontrar o padrão command com outras nomenclaturas
como action e transaction
O problema que o command se propõe a resolver é que algumas vezes é necessário emitir solicitações
pra objetos sem nada saber sobre a operação que está sendo solicitada ou sobre seu receptor
a partir do diagrama de classes do padrão command podemos verificar a função de cada componente e como eles se relacionam
o padrão command possui 5 participantes
O Command: declara uma interface para a execução de uma operação
Concretecommand: define uma vinculação entre um objeto, um Receiver e uma ação
e tambem implementa "execute" através da invocação da operação correspondente no Receiver
temos o Client que cria o objeto COncretecommand e estabelece o seu receptor
temos o invoker, que solicita ao Command a execução da solicitação
e Receiver, que sabe como executar as operações associadas a uma solicitação
qualquer classe pode funcionar como um receiver
como podemos ver nesse diagrama de sequência o client gera um Command
passando Receiver
a principal consequencia do command é que ele desacopla o objeto que invoca a operação
que sabe como executa-la. Ao vizualizar o diagrama de sequência isso ficará mais claro
primeiro o client cria um novo comando especificando seu Receiver
em seguida este Command é armazenado em um Invoker. O Invoker, quando quer chama a ação
do Receiver, ele usa o método execute e o Command que por sua vez chama a ação do Receiver
deste modo o Invoker não conhece como funciona a ação e tambem não conhece o Receiver
Command são objetos de primeira classe ou seja, podem ser manipulados e estendidos como qualquer outro objeto
você pode montar comandos para formar um comando composto ou seja, um Macrocommand
é facil acrescentar novos Commands porque você não tem que mudar classes existentes
A partir de agora vamos ver um exemplo da aplicação do padrão command
Ou seja, um portão que pode ser aberto ou fechado através de um controle
Bem, nosso exemplo do projeto do portão eletrônico
nós temos aqui 6 componentes, temos Command que é a interface que tem apenas as assinaturas dos métodos
execute e undo, sendo que undo é opcional e que o método execute que é implementado na classe ConcreteCommand
Temos agora as classes abrircommand e fecharcommand
Essas classes implementam a interface command
que possuem um objeto do tipo portão que é o receiver do projeto
Essas classes imlementam o execute chamando a ação abrir ou fechar portão que apenas o Receiver sabe como executar
percebam que as classes abrirCommand e fechrCommand apenas chamam os métodos de portão
esses métodos estão implementados somente aqui
somente portão que é o Receiver sabe como executa-los
Ou seja, temos aqui o método abir e o método fechar
temos tambem a classe Controle. A classe controle faz o papel de Invoker pois ela possui um conjunto de comandos
que chamam o método execute desses comandos
Temos aqui uma lista de comandos
E é o Invoker que executa o método desses comandos
E finalmente temos a classe Main que é o nosso cliente, que tem o papel de criar os ConcretCommands
Vejam aqui a criação do abrirCommand e fecharCommand
Que são os comandos de abrir e fechar
Temos aqui também a declaração do Controle que recebe um abrirCommand e fecharCommand
ou seja, o controle armazena os comanndos
bem,depois de vermos o código do projeto do Portão Eletrônico.
vamos ver agora o diagrama de classes do nosso projeto
Temos aqui as classes command e seus relacionamentos
temos o abrirCommand e fecharCommand
temos aqui Portao
o main e o controle
podemos ver os participantes, a interface command o abrirCommand e fecharCommand que são os ConcreteCommand
main é o Cliente, o controle é o Invoker, e o Portao é o Receiver
Temos aqui também outras aplicações, o noCommand , objeto nulo o MacroCommand, um command que pode executar outros commands
enfileirar solicitações, de um servidor.E registro de solicitações, o stor e load
bem, a partir de agora vocês podem utilizar o padrão command que foi apresentado em uma atividade prática
Essa atividade trata-se de uma abstração de um Joystick,onde você vai usar o padrão command para interagir com diferentes jogos
para ter acesso ao documento da atividade prática acesse o site www.csi.uneb.br/padroes_de_projetos/command2.html
obrigado
espero que tenham gostado, e que conheçam os outros padrões
que podem ser utilizados em projetos para aumentar a reutilização
intao é isso ai galera, esse video foi da disciplina de Projeto Avançado de Sistemas da UNEB
com Alan Santos,Leandreson Ferreira e Leone de Jesus.