padroes command 131010061632 phpapp02

Download Padroes Command 131010061632 Phpapp02

Post on 12-Jan-2016

224 views

Category:

Documents

4 download

Embed Size (px)

DESCRIPTION

asasas

TRANSCRIPT

  • O padro Command

  • Motivao

  • Motivao

  • Motivao

  • Motivao

  • Motivao

  • Simplificando Comando

    Receptor

    Invocador

    Cliente

    solicita

  • Invocador

    Simplificando Comando

    Receptor Cliente

    solicita

  • Padro Comando Participantes

  • Estrutura

    Receptor

    Comando

    Invocador

  • Estrutura

    Receptor

    Comando

    Invocador

  • Estrutura

    Receptor

    Comando

    Invocador

  • Estrutura

    Receptor

    Comando

    Invocador

  • Invocador

    Simplificando Comando

    Receptor Cliente

    solicita

  • O Comando Um conjunto de Aes 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 mtodo executar do Comando

    solicitaComando()

    executarComando()

  • 4. O Comando executa os mtodos do Receptor

    solicitaComando()

    executarComando()

  • Implementao Vamos construir um controle remoto que

    funcionar como um invocador Ele acionar diversos mtodos de vrias

    classes Todas as classes que representaram comando

    implementaro uma mesma interface

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

  • Digamos que exista um objeto Lmpada (receptor)

    public class Lampada { public void ligar() { System.out.println("Luz ligada"); } public void desligar() { System.out.println("Luz desligada"); } }

  • Vamos agorar implementar um Comando para ligar a Lmpada(receptor)

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

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

  • criaObjetoComando()

    executarComando()

  • criaObjetoComando()

    pressionarBotao()

  • Crie um Comando para abrir o porto de uma garagem

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

    } }

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

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

  • +1 Padro COMMAND

    O Padro Command encapsula uma solicitao como um objeto, o que lhe permite parametrizar clientes com diferentes solicitaes, enfileirar ou registrar solicitaes (log) e implementar recursos para desfazer operaes.

  • Descrevendo Um objeto Comando

    Encapsula uma solicitao vinculando um conjunto de aes em um receptor especfico

    Empacota as aes e o objeto em um objeto que expe um nico mtodo executar()

    Ao executar() Aes so realizadas no receptor No se sabe quais aes esto sendo realizadas

  • Padro Comando Diagrama de classes

  • ControleRemoto.java

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

  • H um problema E quando no houver comandos? Teremos que escrever?

    if (comandosOn[slot] != null) { comandosOn[slot].executar(); } Criar um Comando que no faz nada

  • NoCommand public class ComandoNenhum implements Comando {

    public void executar() { } }

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

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