Sobes.tech
Senior

Implémentez le motif Stratégie pour le calcul du coût de livraison et un service pour son application

sobes.tech IA

Réponse de l'IA

Паттерн Стратегия позволяет определить семейство алгоритмов, инкапсулировать каждый из них и делать их взаимозаменяемыми.

Пример реализации для расчёта стоимости доставки:

// Интерфейс стратегии
public interface DeliveryStrategy {
    double calculateCost(Order order);
}

// Конкретные стратегии
public class StandardDelivery implements DeliveryStrategy {
    public double calculateCost(Order order) {
        return 5.0; // фиксированная стоимость
    }
}

public class ExpressDelivery implements DeliveryStrategy {
    public double calculateCost(Order order) {
        return 10.0 + 0.5 * order.getWeight();
    }
}

public class FreeDelivery implements DeliveryStrategy {
    public double calculateCost(Order order) {
        return 0.0;
    }
}

// Класс заказа
public class Order {
    private double weight;
    // конструкторы, геттеры
    public Order(double weight) {
        this.weight = weight;
    }
    public double getWeight() {
        return weight;
    }
}

// Сервис для применения стратегии
public class DeliveryService {
    private DeliveryStrategy strategy;

    public DeliveryService(DeliveryStrategy strategy) {
        this.strategy = strategy;
    }

    public void setStrategy(DeliveryStrategy strategy) {
        this.strategy = strategy;
    }

    public double calculateDeliveryCost(Order order) {
        return strategy.calculateCost(order);
    }
}

// Использование
public class Main {
    public static void main(String[] args) {
        Order order = new Order(10); // вес 10 кг
        DeliveryService service = new DeliveryService(new StandardDelivery());
        System.out.println("Стоимость доставки: " + service.calculateDeliveryCost(order));

        service.setStrategy(new ExpressDelivery());
        System.out.println("Стоимость экспресс-доставки: " + service.calculateDeliveryCost(order));
    }
}