Interface command
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package comand;
/**
*
* @author touca
*/
public interface Command {
public void execute();
public void desfazer();
public String toString();
}
Classes de comando
package comand.lampada;
import comand.Command;
import modelo.Lampada;
/**
*
* @author touca
*/
public class AcenderLampada implements Command{
private Lampada lampada;
public AcenderLampada(Lampada lamp) {
this.lampada = lamp;
}
@Override
public void execute() {
lampada.liga();
}
@Override
public void desfazer() {
lampada.desliga();
}
public String toString() {
return "Lampada Acessa";
}
}
package comand.lampada;
import comand.Command;
import modelo.Lampada;
/**
*
* @author touca
*/
public class ApagaLampada implements Command{
private Lampada lampada;
public ApagaLampada(Lampada lamp) {
this.lampada = lamp;
}
@Override
public void execute() {
lampada.desliga();
}
@Override
public void desfazer() {
lampada.liga();
}
public String toString() {
return "Lampada Apagada";
}
}
package comand.porta;
import comand.Command;
import modelo.Porta;
/**
*
* @author touca
*/
public class AbrirPorta implements Command{
private Porta porta;
public AbrirPorta(Porta porta) {
this.porta = porta;
}
@Override
public void execute() {
porta.abrir();
}
@Override
public void desfazer() {
porta.fechar();
}
public String toString() {
return "Abrir Porta";
}
}
package comand.porta;
import comand.Command;
import modelo.Porta;
/**
*
* @author touca
*/
public class FecharPorta implements Command{
private Porta porta;
public FecharPorta(Porta porta) {
this.porta = porta;
}
@Override
public void execute() {
porta.fechar();
}
@Override
public void desfazer() {
porta.abrir();
}
public String toString() {
return "Fechar Porta";
}
}
Classe de controle remoto
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package comand;
import java.util.ArrayList;
import java.util.Stack;
/**
*
* @author touca
*/
public class ControleRemoto {
private ArrayList<Command> controleRemoto;
private Stack pilhaDeDesfazer = new Stack();
public ControleRemoto() {
this.controleRemoto = new ArrayList<>();
//this.pilhaDeDesfazer = new Stack();
}
public void addComando(Command comando){
controleRemoto.add(comando);
}
public void removeComando(Command comando){
controleRemoto.remove(comando);
}
public void faz(int index){
controleRemoto.get(index).execute();
//System.out.println(controleRemoto.get(index).toString());
pilhaDeDesfazer.push(controleRemoto.get(index));
}
public void desfaz(){
((Command)pilhaDeDesfazer.peek()).desfazer();
pilhaDeDesfazer.pop();
}
@Override
public String toString() {
String lista = "";
int i=0;
for (Command command : controleRemoto) {
lista =lista +i+" - "+ command.toString()+"\n";
i++;
}
return lista;
}
}
Objetos manipulados
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package modelo;
/**
*
* @author touca
*/
public class Lampada {
public final static int ACESSO = 0;
public final static int APAGADO = 1;
private int estado = 0;
public int getEstado() {
return estado;
}
public void setEstado(int estado) {
this.estado = estado;
}
public void liga(){
setEstado(ACESSO);
System.out.println("Lampada Acessa");
}
public void desliga(){
setEstado(APAGADO);
System.out.println("Lampada Apagada");
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package modelo;
/**
*
* @author touca
*/
public class Porta {
public final static int ABERTO = 0;
public final static int FECHADO = 1;
private int estado = 0;
public int getEstado() {
return estado;
}
public void setEstado(int estado) {
this.estado = estado;
}
public void abrir(){
this.estado = ABERTO;
System.out.println("porta aberta");
}
public void fechar(){
this.estado = FECHADO;
System.out.println("porta fechada");
}
}