Created
December 20, 2011 11:12
-
-
Save rafaelchagasb/1501234 to your computer and use it in GitHub Desktop.
Template Method
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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