Padrão Command

1.638 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.638
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5
Ações
Compartilhamentos
0
Downloads
65
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(); } }

×