O padrão Command
Motivação
Motivação
Motivação
Motivação
Motivação
Simplificando
Comando
Receptor
Invocador
Cliente
solicita
Invocador
Simplificando
Comando
ReceptorCliente
solicita
Padrão Comando
Participantes
Estrutura
Receptor
Comando
Invocador
Estrutura
Receptor
Comando
Invocador
Estrutura
Receptor
Comando
Invocador
Estrutura
Receptor
Comando
Invocador
Invocador
Simplificando
Comando
ReceptorCliente
solicita
O Comando
Um conjunto de Ações no Receptor
1. O cliente cria um objeto do tipo Comando
solicitaComando()
2. O cliente executa um setComando() para
armazenar o objeto de comando no Invocador
solicitaComando()
3. O cliente pede ao invocador para
executar o comando
solicitaComando()
executarComando()
4. O Invocador chama o método
executar do Comando
solicitaComando()
executarComando()
4. O Comando executa os métodos
do Receptor
solicitaComando()
executarComando()
Implementação
  Vamos construir um controle remoto que
funcionará como um invocador
  Ele acionará diversos métodos de v...
Interface Comando
public interface Comando {
public void executar();
}
Digamos que exista
um objeto Lâmpada (receptor)
public class Lampada {
public void ligar() {
System.out.println("Luz ligad...
Vamos agorar implementar um
Comando para ligar a Lâmpada(receptor)
O Controle Remoto
(invocador)
public class ControleRemotoSimples {
private Comando slot;
public ControleRemotoSimples() {
...
Testando o Controle
public class TesteDoControleRemoto {
public static void main(String[] args) {
ControleRemotoSimples co...
criaObjetoComando()
executarComando()
criaObjetoComando()
pressionarBotao()
Crie um Comando para abrir o portão
de uma garagem
PortaoAutomatico.java
public class PortaoAutomatico {
public void abrir() {
System.out.println("Portao abrindo");
}
public...
ComandoAbrirPortaoAutomatico.java
public class ComandoAbrirPortaoAutomatico implements Comando {
private PortaoAutomatico ...
+1 Padrão
COMMAND
O Padrão Command encapsula uma
solicitação como um objeto, o que lhe
permite parametrizar clientes com d...
Descrevendo
  Um objeto Comando
  Encapsula uma solicitação vinculando um conjunto
de ações em um receptor específico
 ...
Padrão Comando
Diagrama de classes
ControleRemoto.java
ControleRemoto.java
public class ControleRemoto {
Comando[] comandosOn;
Comando[] comandosOff;
public ControleRemoto() {
}...
Há um problema
  E quando não houver comandos?
  Teremos que escrever?
if (comandosOn[slot] != null) {
comandosOn[slot]....
NoCommand
public class ComandoNenhum
implements Comando {
public void executar() {
}
}
O Construtor do ControleRemoto
public ControleRemoto() {
comandosOn = new Comando[7];
comandosOff = new Comando[7];
Comand...
Com undo
public class ComandoLuzLigada implements Comando {
private Lampada luz;
public ComandoLuzLigada(Lampada luz) {
th...
Padrão Command
Próximos SlideShares
Carregando em…5
×

Padrão Command

1.496 visualizações

Publicada em

Publicada em: Tecnologia
1 comentário
0 gostaram
Estatísticas
Notas
  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.496
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5
Ações
Compartilhamentos
0
Downloads
60
Comentários
1
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Padrão Command

  1. 1. O padrão Command
  2. 2. Motivação
  3. 3. Motivação
  4. 4. Motivação
  5. 5. Motivação
  6. 6. Motivação
  7. 7. Simplificando Comando Receptor Invocador Cliente solicita
  8. 8. Invocador Simplificando Comando ReceptorCliente solicita
  9. 9. Padrão Comando Participantes
  10. 10. Estrutura Receptor Comando Invocador
  11. 11. Estrutura Receptor Comando Invocador
  12. 12. Estrutura Receptor Comando Invocador
  13. 13. Estrutura Receptor Comando Invocador
  14. 14. Invocador Simplificando Comando ReceptorCliente solicita
  15. 15. O Comando Um conjunto de Ações no Receptor
  16. 16. 1. O cliente cria um objeto do tipo Comando solicitaComando()
  17. 17. 2. O cliente executa um setComando() para armazenar o objeto de comando no Invocador solicitaComando()
  18. 18. 3. O cliente pede ao invocador para executar o comando solicitaComando() executarComando()
  19. 19. 4. O Invocador chama o método executar do Comando solicitaComando() executarComando()
  20. 20. 4. O Comando executa os métodos do Receptor solicitaComando() executarComando()
  21. 21. Implementação   Vamos construir um controle remoto que funcionará como um invocador   Ele acionará diversos métodos de várias classes   Todas as classes que representaram comando implementarão uma mesma interface
  22. 22. Interface Comando public interface Comando { public void executar(); }
  23. 23. Digamos que exista um objeto Lâmpada (receptor) public class Lampada { public void ligar() { System.out.println("Luz ligada"); } public void desligar() { System.out.println("Luz desligada"); } }
  24. 24. Vamos agorar implementar um Comando para ligar a Lâmpada(receptor)
  25. 25. O Controle Remoto (invocador) public class ControleRemotoSimples { private Comando slot; public ControleRemotoSimples() { } public void setComando(Comando comando) { this.slot = comando; } public void pressionarBotao() { slot.executar(); } }
  26. 26. Testando o Controle public class TesteDoControleRemoto { public static void main(String[] args) { ControleRemotoSimples controle = new ControleRemotoSimples(); Lampada lampada = new Lampada(); ComandoLuzLigada ligarLuz = new ComandoLuzLigada(lampada); controle.setComando(ligarLuz); controle.pressionarBotao(); } }
  27. 27. criaObjetoComando() executarComando()
  28. 28. criaObjetoComando() pressionarBotao()
  29. 29. Crie um Comando para abrir o portão de uma garagem
  30. 30. PortaoAutomatico.java public class PortaoAutomatico { public void abrir() { System.out.println("Portao abrindo"); } public void fechar() { System.out.println("Portao fechando"); } }
  31. 31. ComandoAbrirPortaoAutomatico.java public class ComandoAbrirPortaoAutomatico implements Comando { private PortaoAutomatico portao; public ComandoAbrirPortaoAutomatico(PortaoAutomatico portao) { this.portao = portao; } public void executar() { portao.abrir(); } }
  32. 32. +1 Padrão COMMAND O Padrão Command encapsula uma solicitação como um objeto, o que lhe permite parametrizar clientes com diferentes solicitações, enfileirar ou registrar solicitações (log) e implementar recursos para desfazer operações.
  33. 33. Descrevendo   Um objeto Comando   Encapsula uma solicitação vinculando um conjunto de ações em um receptor específico   Empacota as ações e o objeto em um objeto que expõe um único método  executar()   Ao executar()  Ações são realizadas no receptor   Não se sabe quais ações estão sendo realizadas
  34. 34. Padrão Comando Diagrama de classes
  35. 35. ControleRemoto.java
  36. 36. ControleRemoto.java public class ControleRemoto { Comando[] comandosOn; Comando[] comandosOff; public ControleRemoto() { } public void pressionarBotaoOn(int slot) { comandosOn[slot].executar(); } public void pressionarBotaoOff(int slot) { comandosOff[slot].executar(); } public void setCommand(int slot, Comando on, Comando off) { comandosOn[slot] = on; comandosOff[slot] = off; } }
  37. 37. Há um problema   E quando não houver comandos?   Teremos que escrever? if (comandosOn[slot] != null) { comandosOn[slot].executar(); } Criar um Comando que não faz nada
  38. 38. NoCommand public class ComandoNenhum implements Comando { public void executar() { } }
  39. 39. O Construtor do ControleRemoto public ControleRemoto() { comandosOn = new Comando[7]; comandosOff = new Comando[7]; Comando semComando = new ComandoNenhum(); for (int i = 0; i < 7; i++) { comandosOn[i] = semComando; comandosOff[i] = semComando; } }
  40. 40. Com undo public class ComandoLuzLigada implements Comando { private Lampada luz; public ComandoLuzLigada(Lampada luz) { this.luz = luz; } public void executar() { luz.ligar(); } public void undo() { luz.desligar(); } }

×