Strategy

interface

 

interface Imposto {

 double calcula(Orcamento orcamento);

}

 

icms.java

 

class ICMS implements Imposto {

 

 public double calcula(Orcamento orcamento) {

         return orcamento.getValor() * 0.1;

 }

 

}

 

iss.java

 

class ISS implements Imposto {

 

 public double calcula(Orcamento orcamento) {

         return orcamento.getValor() * 0.06;

 }

 

}

 

regra de negócios

 

class CalculadorDeImpostos {

 

 public void realizaCalculo(Orcamento orcamento, Imposto imposto) {

 

         double valor = imposto.calcula(orcamento);

         System.out.println(valor);

 

 }

 

}

 

testando

 

public class Principal {

 

 public static void main(String[] args) {

         Imposto iss = new ISS();

         Imposto icms = new ICMS();

 

         Orcamento orcamento = new Orcamento(500.0);

 

         CalculadorDeImpostos calculador = new CalculadorDeImpostos();

 

         // Calculando o ISS

         calculador.realizaCalculo(orcamento, iss);

 

         // Calculando o ICMS

         calculador.realizaCalculo(orcamento, icms);

 

 }

 

}