- 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