Skip to content

Instantly share code, notes, and snippets.

@alexduarte
Created December 20, 2011 04:11
Show Gist options
  • Save alexduarte/1500219 to your computer and use it in GitHub Desktop.
Save alexduarte/1500219 to your computer and use it in GitHub Desktop.
public abstract class TemplateDeImpostoCondicional implements Imposto {
public double calcula(Orcamento orcamento) {
if(deveUsarMaximaTaxacao(orcamento)){
return maximaTaxacao(orcamento);
}
else {
return minimaTaxacao(orcamento);
}
}
public abstract boolean deveUsarMaximaTaxacao(Orcamento orcamento);
public abstract double maximaTaxacao(Orcamento orcamento);
public abstract double minimaTaxacao(Orcamento orcamento);
}
public class ICPP extends TemplateDeImpostoCondicional {
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 class IKCV extends TemplateDeImpostoCondicional {
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 TestaImpostos {
public static void main(String[] args) {
ICPP icpp = new ICPP();
CalculadorImposto calcula = new CalculadorImposto();
Orcamento orcamento = new Orcamento(700.00);
calcula.calculaImposto(orcamento, icpp);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment