using static System.Console;
public static void Main() {
var calc = new CalculaImposto(new CalculaImpostoSP());
WriteLine("Imposto SP: " + calc.Calcula(1500M));
calc.Strategy = new CalculaImpostoRJ();
WriteLine("Imposto RJ: " + calc.Calcula(1500M));
public interface ICalculaImposto {
decimal Calcula(decimal baseCalculo);
public class CalculaImpostoSP : ICalculaImposto {
public decimal Calcula(decimal baseCalculo) => baseCalculo * 0.18M;
public class CalculaImpostoRJ : ICalculaImposto {
public decimal Calcula(decimal baseCalculo) => baseCalculo * 0.12M;
public class CalculaImposto {
public ICalculaImposto Strategy { get; set; }
public CalculaImposto(ICalculaImposto strategy) { Strategy = strategy; }
public decimal Calcula(decimal baseCalculo) => Strategy.Calcula(baseCalculo);