Skip to content

Instantly share code, notes, and snippets.

@rafaelchagasb
Forked from alexduarte/gist:1503345
Created December 21, 2011 12:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rafaelchagasb/1505796 to your computer and use it in GitHub Desktop.
Save rafaelchagasb/1505796 to your computer and use it in GitHub Desktop.
Decorator - Exercício 3
public class IKCV extends TemplateDeImpostoCondicional {
public IKCV(Imposto outroImposto) {
super(outroImposto);
}
public IKCV(){}
public boolean deveUsarMaximaTaxacao(Orcamento orcamento) {
return orcamento.getValor() > 500.00 && temItemMaiorQue100Reais(orcamento);
}
public double maximaTaxacao(Orcamento orcamento) {
return orcamento.getValor()*0.1;
}
public double minimaTaxacao(Orcamento orcamento) {
return orcamento.getValor()*0.06;
}
private boolean temItemMaiorQue100Reais(Orcamento orcamento){
for(Item item: orcamento.getItens()){
if(item.getValor() > 100)
return true;
}
return false;
}
}
public class ICPP extends TemplateDeImpostoCondicional {
public ICPP(Imposto outroImposto) {
super(outroImposto);
}
public ICPP(){}
public boolean deveUsarMaximaTaxacao(Orcamento orcamento) {
return orcamento.getValor()>500.00;
}
public double maximaTaxacao(Orcamento orcamento) {
return orcamento.getValor()*0.07;
}
public double minimaTaxacao(Orcamento orcamento) {
return orcamento.getValor()*0.05;
}
}
public abstract class Imposto {
private final Imposto outroImposto;
public Imposto(Imposto outroImposto){
this.outroImposto = outroImposto;
}
public Imposto(){
this.outroImposto = null;
}
protected double calculoDoOutroImposto(Orcamento orcamento) {
if(outroImposto==null)return 0;
return outroImposto.calcula(orcamento);
}
public abstract double calcula(Orcamento orcamento);
}
public abstract class TemplateDeImpostoCondicional extends Imposto {
public TemplateDeImpostoCondicional(){}
public TemplateDeImpostoCondicional(Imposto outroImposto){
super(outroImposto);
}
public double calcula(Orcamento orcamento) {
if(deveUsarMaximaTaxacao(orcamento)){
return maximaTaxacao(orcamento)+ calculoDoOutroImposto(orcamento);
}
else {
return minimaTaxacao(orcamento) + calculoDoOutroImposto(orcamento);
}
}
public abstract boolean deveUsarMaximaTaxacao(Orcamento orcamento);
public abstract double maximaTaxacao(Orcamento orcamento);
public abstract double minimaTaxacao(Orcamento orcamento);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment