public interface IBridgeComponents
    {
        void Envia(string tipoMensagem);
    }
    public abstract class EnviaDados
    {
        public IBridgeComponents _iBridgeComponents { get; set; }
        public abstract void Envia();
    }
  public class EnviaPorEmail : EnviaDados
    {
        public override void Envia()
        {
            _iBridgeComponents.Envia("E-mail");
        }
    }
  public class EnviaPorSMS : EnviaDados
    {
        public override void Envia()
        {
            _iBridgeComponents.Envia("SMS");
        }
    }
  public class API : IBridgeComponents
    {
        public void Envia(string tipoMensagem)
        {
            Console.WriteLine("Enviando " + tipoMensagem + " usando uma API." );
        }
    }
  public class WebService : IBridgeComponents
    {
        public void Envia(string tipoMensagem)
        {
            Console.WriteLine("Enviando " + tipoMensagem + " usando WebService.");
        }
    }
  class Program
    {
        static void Main(string[] args)
        {
            // Usando o envio por e-mail
            EnviaDados enviaDado = new EnviaPorEmail();
            enviaDado._iBridgeComponents = new WebService();
            enviaDado.Envia();
            enviaDado._iBridgeComponents = new API();
            enviaDado.Envia();
            // Usando o envio por SMS
            enviaDado = new EnviaPorSMS();
            enviaDado._iBridgeComponents = new WebService();
            enviaDado.Envia();
            enviaDado._iBridgeComponents = new API();
            enviaDado.Envia();
        }
    }