Modelos
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Modelos;
/**
*
* @author aluno
*/
public interface Movel {
public double getPreco();
public String getItemNome();
}
package Modelos;
/**
*
* @author aluno
*/
public class GuardaRoupa implements Movel{
@Override
public double getPreco() {
return 200.0;
}
@Override
public String getItemNome() {
return "Guarda roupa";
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Modelos;
/**
*
* @author aluno
*/
public class Armario implements Movel{
@Override
public double getPreco() {
return 100.0;
}
@Override
public String getItemNome() {
return "Armario";
}
}
Decorador
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Decorator;
import Modelos.Movel;
/**
*
* @author aluno
*/
abstract public class DecoratorMovel implements Movel{
protected final Movel decoratorMovel;
String separador = ", ";
public DecoratorMovel(Movel decoratorMovel){
this.decoratorMovel = decoratorMovel;
}
@Override
public double getPreco() {
return decoratorMovel.getPreco();
}
@Override
public String getItemNome() {
return decoratorMovel.getItemNome();
}
}
Itens Adicionais
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Decorator;
import Modelos.Movel;
/**
*
* @author aluno
*/
public class Gaveta25cm extends DecoratorMovel{
public Gaveta25cm(Movel movel){
super(movel);
}
@Override
public double getPreco() {
return super.getPreco()+70.0;
}
@Override
public String getItemNome() {
return super.getItemNome()+separador+"Gaveta 25cm";
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Decorator;
import Modelos.Movel;
/**
*
* @author aluno
*/
public class Porta1m extends DecoratorMovel{
public Porta1m(Movel movel){
super(movel);
}
@Override
public double getPreco() {
return super.getPreco()+60.0;
}
@Override
public String getItemNome() {
return super.getItemNome()+separador+"Porta de 1M";
}
}
Um projeto pode ser baixado usando o código descrito acima