Definição
O Command Pattern é usado para criar objetos que representam as ações e
eventos em um aplicativo. Um objeto de comnand encapsula uma ação ou evento e obtem todas as informações necessárias para entender exatamente o que aconteceu. Ao passar o objeto de command como um parâmetro que pode, em qualquer lugar necessário extrair informações sobre ações e eventos ocorridos.
eventos em um aplicativo. Um objeto de comnand encapsula uma ação ou evento e obtem todas as informações necessárias para entender exatamente o que aconteceu. Ao passar o objeto de command como um parâmetro que pode, em qualquer lugar necessário extrair informações sobre ações e eventos ocorridos.
Quando usar
• Se você quer uma ação que pode ser representada de várias formas, como menus suspensos, botões e menus pop-up.
• Um objeto é um command de armazenamento possível para procedimento de parâmetros. Pode ser utilizado durante a montagem dos parâmetros para uma chamada de função e permite que o command seja reservado para uso posterior.
• Uma classe é um lugar adequado para coletar o código e os dados relacionados a um determinada ação ou evento.
• Permite a reação de um command a ser executado algum tempo depois de ter ocorrido.
• Os objetos Command permitem estruturas de dados contendo vários commands.
• Objetos de command suportam desfazer operações capazes, desde que os
objetos sejam armazenados (por exemplo, em uma lista ligada).
Desvantagens / consequências
Command desacopla o objeto que invca a operação daquele que sabe como executa-la.
Commands são objetos de primeira classe, ou seja, podem ser manipulados e estendidos como qualquer outro objeto.
Exemplo
package com.logica.command;
/** Command interface */
public interface Command{
void execute();
}
package com.logica.command;
/** The Command for turning on the light */
public class TurnOnLightCommand implements Command{
private Light theLight;
public TurnOnLightCommand(Light light){
this.theLight=light;
}
public void execute(){
theLight.turnOn();
}
}
package com.logica.command;
/** The Command for turning off the light */
public class TurnOffLightCommand implements Command{
private Light theLight;
public TurnOffLightCommand(Light light){
this.theLight=light;
}
public void execute(){
theLight.turnOff();
}
}
package com.logica.command;
/** Receiver class */
public class Light{
public Light(){ }
public void turnOn(){
System.out.println("The light is on");
}
public void turnOff(){
System.out.println("The light is off");
}
}
package com.logica.command;
/** Invoker class*/
public class Switch {
private Command flipUpCommand;
private Command flipDownCommand;
public Switch(Command flipUpCmd,Command flipDownCmd){
this.flipUpCommand=flipUpCmd;
this.flipDownCommand=flipDownCmd;
}
public void flipUp(){
flipUpCommand.execute();
}
public void flipDown(){
flipDownCommand.execute();
}
}
package com.logica.command;
/** Test class */
public class TestCommand{
public static void main(String[] args){
Light l = new Light();
Command switchUp = new TurnOnLightCommand(l);
Command switchDown = new TurnOffLightCommand(l);
Switch s = new Switch(switchUp,switchDown);
s.flipUp();
s.flipDown();
}
}
Quando executado TestCommand o resultado é:
The light is on
The light is off
Nenhum comentário:
Postar um comentário