using static System.Console;
public class Program {
public static void Main() {
var calc = new CalculaImposto(new CalculaImpostoSP());
WriteLine("Imposto SP: " + calc.Calcula(1500M)); //aqui obviamente pegaria o valor do produto na classe específica
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; } //constuma-se considerar isto obrigatório para cumprir o padrão
public CalculaImposto(ICalculaImposto strategy) { Strategy = strategy; }
public decimal Calcula(decimal baseCalculo) => Strategy.Calcula(baseCalculo);
}
//https://pt.stackoverflow.com/q/187908/101