Top Banner
O padrão Command
41

Padroes Command 131010061632 Phpapp02

Jan 12, 2016

Download

Documents

Luiz_felippe_94

asasas
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Padroes Command 131010061632 Phpapp02

O padrão Command

Page 2: Padroes Command 131010061632 Phpapp02

Motivação

Page 3: Padroes Command 131010061632 Phpapp02

Motivação

Page 4: Padroes Command 131010061632 Phpapp02

Motivação

Page 5: Padroes Command 131010061632 Phpapp02

Motivação

Page 6: Padroes Command 131010061632 Phpapp02

Motivação

Page 7: Padroes Command 131010061632 Phpapp02

Simplificando Comando

Receptor

Invocador

Cliente

solicita

Page 8: Padroes Command 131010061632 Phpapp02

Invocador

Simplificando Comando

Receptor Cliente

solicita

Page 9: Padroes Command 131010061632 Phpapp02

Padrão Comando Participantes

Page 10: Padroes Command 131010061632 Phpapp02

Estrutura

Receptor

Comando

Invocador

Page 11: Padroes Command 131010061632 Phpapp02

Estrutura

Receptor

Comando

Invocador

Page 12: Padroes Command 131010061632 Phpapp02

Estrutura

Receptor

Comando

Invocador

Page 13: Padroes Command 131010061632 Phpapp02

Estrutura

Receptor

Comando

Invocador

Page 14: Padroes Command 131010061632 Phpapp02

Invocador

Simplificando Comando

Receptor Cliente

solicita

Page 15: Padroes Command 131010061632 Phpapp02

O Comando Um conjunto de Ações no Receptor

Page 16: Padroes Command 131010061632 Phpapp02

1. O cliente cria um objeto do tipo Comando

solicitaComando()

Page 17: Padroes Command 131010061632 Phpapp02

2. O cliente executa um setComando() para armazenar o objeto de comando no Invocador

solicitaComando()

Page 18: Padroes Command 131010061632 Phpapp02

3. O cliente pede ao invocador para executar o comando

solicitaComando()

executarComando()

Page 19: Padroes Command 131010061632 Phpapp02

4. O Invocador chama o método executar do Comando

solicitaComando()

executarComando()

Page 20: Padroes Command 131010061632 Phpapp02

4. O Comando executa os métodos do Receptor

solicitaComando()

executarComando()

Page 21: Padroes Command 131010061632 Phpapp02

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

Page 22: Padroes Command 131010061632 Phpapp02

Interface Comando public interface Comando { public void executar(); }

Page 23: Padroes Command 131010061632 Phpapp02

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"); } }

Page 24: Padroes Command 131010061632 Phpapp02

Vamos agorar implementar um Comando para ligar a Lâmpada(receptor)

Page 25: Padroes Command 131010061632 Phpapp02

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(); } }

Page 26: Padroes Command 131010061632 Phpapp02

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(); } }

Page 27: Padroes Command 131010061632 Phpapp02

criaObjetoComando()

executarComando()

Page 28: Padroes Command 131010061632 Phpapp02

criaObjetoComando()

pressionarBotao()

Page 29: Padroes Command 131010061632 Phpapp02

Crie um Comando para abrir o portão de uma garagem

Page 30: Padroes Command 131010061632 Phpapp02

PortaoAutomatico.java public class PortaoAutomatico { public void abrir() { System.out.println("Portao abrindo"); } public void fechar() { System.out.println("Portao fechando");

} }

Page 31: Padroes Command 131010061632 Phpapp02

ComandoAbrirPortaoAutomatico.java public class ComandoAbrirPortaoAutomatico implements Comando { private PortaoAutomatico portao; public ComandoAbrirPortaoAutomatico(PortaoAutomatico portao)

{ this.portao = portao; } public void executar() { portao.abrir(); } }

Page 32: Padroes Command 131010061632 Phpapp02

+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.

Page 33: Padroes Command 131010061632 Phpapp02

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

Page 34: Padroes Command 131010061632 Phpapp02

Padrão Comando Diagrama de classes

Page 35: Padroes Command 131010061632 Phpapp02
Page 36: Padroes Command 131010061632 Phpapp02

ControleRemoto.java

Page 37: Padroes Command 131010061632 Phpapp02

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; } }

Page 38: Padroes Command 131010061632 Phpapp02

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

Page 39: Padroes Command 131010061632 Phpapp02

NoCommand public class ComandoNenhum implements Comando {

public void executar() {

} }

Page 40: Padroes Command 131010061632 Phpapp02

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; } }

Page 41: Padroes Command 131010061632 Phpapp02

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(); } }