Escolar Documentos
Profissional Documentos
Cultura Documentos
Motivao
Motivao
Motivao
Motivao
Motivao
Simplificando
Comando
solicita
Cliente
Receptor
Invocador
Simplificando
Comando
solicita
Receptor
Cliente
Invocador
Padro Comando
Participantes
Estrutura
Invocador
Comando
Receptor
Estrutura
Invocador
Comando
Receptor
Estrutura
Invocador
Comando
Receptor
Estrutura
Invocador
Comando
Receptor
Simplificando
Comando
solicita
Receptor
Cliente
Invocador
O Comando
Um conjunto de Aes no Receptor
)
(
o
d
n
a
m
o
C
executar
)
(
o
d
n
a
m
o
C
executar
)
(
o
d
n
a
m
o
C
executar
Implementao
Interface Comando
public interface Comando {
public void executar();
}
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();
}
}
()
o
d
n
a
m
o
C
o
criaObjet
)
(
o
d
n
a
m
o
C
executar
()
o
d
n
a
m
o
C
o
criaObjet
()
o
a
t
o
B
r
a
n
o
i
press
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
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
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();
}
}