Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save IoTeacher/0fc0d93c8731fcd68cbfe970c591f3d4 to your computer and use it in GitHub Desktop.
Save IoTeacher/0fc0d93c8731fcd68cbfe970c591f3d4 to your computer and use it in GitHub Desktop.

📒 3.4.1 Ejercicios.

📊 Patrón Estrategia.

  • 👩‍💻 Nombre: Cortes Hernandez Yuridia Saray

📌 Objetivo:

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.

⚙️ Codigo.

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);
    }
}

✒️ Compilacion.

image

@IoTeacher
Copy link
Author

Agregar conclusiones de Uds. (no GTP´s)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment