namespace SistemaComercioElectronico
public interface IEstrategiaEnvio
double CalcularCostoEnvio(double peso, double distancia);
class EnvioEstandar : IEstrategiaEnvio
public double CalcularCostoEnvio(double peso, double distancia)
double tarifaPorKilometro = 0.5;
return tarifaPorKilometro * distancia;
class EnvioExpress : IEstrategiaEnvio
public double CalcularCostoEnvio(double peso, double distancia)
double costoPorKilometro = 1.0;
double costoTotal = costoBase + (costoPorKilometro * distancia);
return peso * costoTotal;
private string detallesPedido;
private IEstrategiaEnvio estrategiaEnvio;
public Pedido(string detallesPedido, IEstrategiaEnvio estrategiaEnvio)
this.detallesPedido = detallesPedido;
this.estrategiaEnvio = estrategiaEnvio;
public void CambiarEstrategiaEnvio(IEstrategiaEnvio nuevaEstrategia)
this.estrategiaEnvio = nuevaEstrategia;
public double CalcularCostoEnvio(double peso, double distancia)
return this.estrategiaEnvio.CalcularCostoEnvio(peso, distancia);
static void Main(string[] args)
Pedido pedido1 = new Pedido("Detalles del pedido 1", new EnvioEstandar());
double pesoPedido1 = 2.5;
double distanciaPedido1 = 100;
double costoEnvioPedido1 = pedido1.CalcularCostoEnvio(pesoPedido1, distanciaPedido1);
Console.WriteLine($"El costo de envío del pedido 1 es: ${costoEnvioPedido1}");
pedido1.CambiarEstrategiaEnvio(new EnvioExpress());
double costoEnvioExpressPedido1 = pedido1.CalcularCostoEnvio(pesoPedido1, distanciaPedido1);
Console.WriteLine($"El costo de envío express del pedido 1 es: ${costoEnvioExpressPedido1}");