Назад к вопросам
DNS
Senior
4
Реализуй паттерн Стратегия для расчёта стоимости доставки и сервис для его применения
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Паттерн Стратегия позволяет определить семейство алгоритмов, инкапсулировать каждый из них и делать их взаимозаменяемыми.
Пример реализации для расчёта стоимости доставки:
// Интерфейс стратегии
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));
}
}