Skip to content

Instantly share code, notes, and snippets.

@alexduarte
Created December 20, 2011 21:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save alexduarte/1503345 to your computer and use it in GitHub Desktop.
Save alexduarte/1503345 to your computer and use it in GitHub Desktop.
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 + calculoDoOutroImposto(orcamento);
}
public double minimaTaxacao(Orcamento orcamento) {
return orcamento.getValor()*0.06 + calculoDoOutroImposto(orcamento);
}
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 + calculoDoOutroImposto(orcamento);
}
public double maximaTaxacao(Orcamento orcamento) {
return orcamento.getValor()*0.07 + calculoDoOutroImposto(orcamento);
}
public double minimaTaxacao(Orcamento orcamento) {
return orcamento.getValor()*0.05 + calculoDoOutroImposto(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);
}
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);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment