Skip to content

Instantly share code, notes, and snippets.

@rafaelchagasb
Created December 20, 2011 11:12
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/1501234 to your computer and use it in GitHub Desktop.
Save rafaelchagasb/1501234 to your computer and use it in GitHub Desktop.
Template Method
public abstract class TemplateImposto implements Imposto{
public double calculaImposto(Orcamento orcamento) {
if(usarMaximaTaxacao(orcamento))
return maximaTaxacao(orcamento);
else
return minimaTaxacao(orcamento);
}
public abstract boolean usarMaximaTaxacao(Orcamento orcamento);
public abstract double maximaTaxacao(Orcamento orcamento);
public abstract double minimaTaxacao(Orcamento orcamento);
}
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class Orcamento {
private double valor;
private List<Item> itens;
public Orcamento(double valor)
{
this.setValor(valor);
this.itens = new ArrayList<Item>();
}
public double getValor() {
return valor;
}
public void setValor(double valor) {
this.valor = valor;
}
public List<Item> getItens()
{
return Collections.unmodifiableList(itens);
}
public void adicionaItem(Item item)
{
itens.add(item);
}
}
public class Item {
private String nome;
private double valor;
public Item(String nome,double valor) {
this.nome = nome;
this.valor = valor;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public double getValor() {
return valor;
}
public void setValor(double valor) {
this.valor = valor;
}
}
public interface Imposto {
double calculaImposto(Orcamento orcamento);
}
public class IKVC extends TemplateImposto{
@Override
public boolean usarMaximaTaxacao(Orcamento orcamento) {
return orcamento.getValor() > 500 && valorDeItemSuperior(orcamento);
}
@Override
public double maximaTaxacao(Orcamento orcamento) {
return orcamento.getValor()*0.1;
}
@Override
public double minimaTaxacao(Orcamento orcamento) {
return orcamento.getValor()*0.06;
}
private boolean valorDeItemSuperior(Orcamento orcamento)
{
for(Item item:orcamento.getItens())
if(item.getValor() > 100)
return true;
return false;
}
}
public class IHIT extends TemplateImposto{
@Override
public boolean usarMaximaTaxacao(Orcamento orcamento) {
return verificaItensRepetidos(orcamento);
}
private boolean verificaItensRepetidos(Orcamento orcamento) {
int cont=0;
for(Item item:orcamento.getItens())
{
cont=0;
for(Item item2:orcamento.getItens())
if(item.getNome().equals(item2.getNome()))
cont++;
if(cont>=2)
return true;
}
return false;
}
@Override
public double maximaTaxacao(Orcamento orcamento) {
return orcamento.getValor()*0.13;
}
@Override
public double minimaTaxacao(Orcamento orcamento) {
return orcamento.getValor()*0.01*orcamento.getItens().size();
}
}
public class ICPP extends TemplateImposto{
@Override
public boolean usarMaximaTaxacao(Orcamento orcamento) {
return orcamento.getValor() > 500;
}
@Override
public double maximaTaxacao(Orcamento orcamento) {
return orcamento.getValor()*0.07;
}
@Override
public double minimaTaxacao(Orcamento orcamento) {
return orcamento.getValor()*0.05;
}
}
public class TestarImposto {
public static void main(String[] args) {
Orcamento orcamento = new Orcamento(700);
orcamento.adicionaItem(new Item("LAPIS",90));
orcamento.adicionaItem(new Item("CANETAS",90));
orcamento.adicionaItem(new Item("LAPIS",90));
Imposto imp1 = new ICPP();
Imposto imp2 = new IKVC();
Imposto imp3 = new IHIT();
System.out.println(imp1.calculaImposto(orcamento));
System.out.println(imp2.calculaImposto(orcamento));
System.out.println(imp3.calculaImposto(orcamento));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment