- 👩💻 Nombre: Cortes Hernandez Yuridia Saray
Implementar el patrón Estrategia para permitir el cambio dinámico de los algoritmos de cálculo de costos de envío en un sistema de comercio electrónico.
using System;
// Interfaz para las estrategias de envío
public interface IEstrategiaEnvio
{
double CalcularCostoEnvio(double peso, double distancia);
}
// Implementación de una estrategia de envío concreta: Envío Express
public class EnvioExpress : IEstrategiaEnvio
{
public double CalcularCostoEnvio(double peso, double distancia)
{
// Algoritmo de cálculo de costo para envío express
return (peso * 0.05 + distancia * 0.02) + 5; // Ejemplo de cálculo simple
}
}
// Implementación de una estrategia de envío concreta: Envío Estándar
public class EnvioEstandar : IEstrategiaEnvio
{
public double CalcularCostoEnvio(double peso, double distancia)
{
// Algoritmo de cálculo de costo para envío estándar
return (peso * 0.03 + distancia * 0.01) + 3; // Ejemplo de cálculo simple
}
}
class Program
{
static void Main(string[] args)
{
// Crear instancias de las estrategias de envío
var envioExpress = new EnvioExpress();
var envioEstandar = new EnvioEstandar();
// Solicitar al usuario que ingrese el peso y la distancia
Console.WriteLine("-----> Datos del Paquete <-----\n");
Console.Write("Ingrese el peso del paquete en kg: ");
double peso = double.Parse(Console.ReadLine());
Console.Write("Ingrese la distancia del envio en km: ");
double distancia = double.Parse(Console.ReadLine());
// Solicitar al usuario que seleccione el tipo de envío
Console.WriteLine("\n-----> Seleccionando el Tipo de Envio <-----\n");
Console.WriteLine("Seleccione el tipo de envio:");
Console.WriteLine("\n1) Envio Express.");
Console.WriteLine("2) Envio Estandar.");
Console.Write("\nOpcion:");
int opcion = int.Parse(Console.ReadLine());
IEstrategiaEnvio estrategiaEnvio = opcion == 1 ? envioExpress : envioEstandar;
// Crear un pedido con la estrategia de envío seleccionada
var pedido = new Pedido(estrategiaEnvio);
// Calcular el costo de envío con la estrategia seleccionada
double costoEnvio = pedido.CalcularCostoEnvio(peso, distancia);
Console.WriteLine("\n-----> Costo del Envio Seleccionado <-----\n");
Console.WriteLine($"Costo de envio: ${costoEnvio}");
}
}
// Clase Pedido que utiliza una estrategia de envío para calcular el costo de envío
public class Pedido
{
private IEstrategiaEnvio _estrategiaEnvio;
public Pedido(IEstrategiaEnvio estrategiaEnvio)
{
_estrategiaEnvio = estrategiaEnvio;
}
public double CalcularCostoEnvio(double peso, double distancia)
{
return _estrategiaEnvio.CalcularCostoEnvio(peso, distancia);
}
}