fork download
  1. using static System.Console;
  2.  
  3. public class Program {
  4. public static void Main() {
  5. var calc = new CalculaImposto(new CalculaImpostoSP());
  6. WriteLine("Imposto SP: " + calc.Calcula(1500M)); //aqui obviamente pegaria o valor do produto na classe específica
  7. calc.Strategy = new CalculaImpostoRJ();
  8. WriteLine("Imposto RJ: " + calc.Calcula(1500M));
  9. }
  10. }
  11.  
  12. public interface ICalculaImposto {
  13. decimal Calcula(decimal baseCalculo);
  14. }
  15.  
  16. public class CalculaImpostoSP : ICalculaImposto {
  17. public decimal Calcula(decimal baseCalculo) => baseCalculo * 0.18M;
  18. }
  19.  
  20. public class CalculaImpostoRJ : ICalculaImposto {
  21. public decimal Calcula(decimal baseCalculo) => baseCalculo * 0.12M;
  22. }
  23.  
  24. public class CalculaImposto {
  25. public ICalculaImposto Strategy { get; set; } //constuma-se considerar isto obrigatório para cumprir o padrão
  26. public CalculaImposto(ICalculaImposto strategy) { Strategy = strategy; }
  27. public decimal Calcula(decimal baseCalculo) => Strategy.Calcula(baseCalculo);
  28. }
  29.  
  30. //https://pt.stackoverflow.com/q/187908/101
Success #stdin #stdout 0.02s 16420KB
stdin
Standard input is empty
stdout
Imposto SP: 270.00
Imposto RJ: 180.00