Sobes.tech
Senior

Implement the Strategy pattern for calculating delivery costs and a service for its application.

sobes.tech AI

Answer from AI

The Strategy pattern allows defining a family of algorithms, encapsulating each one, and making them interchangeable.

Example implementation for calculating delivery cost:

// Strategy interface
public interface DeliveryStrategy {
    double calculateCost(Order order);
}

// Concrete strategies
public class StandardDelivery implements DeliveryStrategy {
    public double calculateCost(Order order) {
        return 5.0; // fixed cost
    }
}

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

// Order class
public class Order {
    private double weight;
    // constructors, getters
    public Order(double weight) {
        this.weight = weight;
    }
    public double getWeight() {
        return weight;
    }
}

// Service for applying strategy
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);
    }
}

// Usage
public class Main {
    public static void main(String[] args) {
        Order order = new Order(10); // weight 10 kg
        DeliveryService service = new DeliveryService(new StandardDelivery());
        System.out.println("Delivery cost: " + service.calculateDeliveryCost(order));

        service.setStrategy(new ExpressDelivery());
        System.out.println("Express delivery cost: " + service.calculateDeliveryCost(order));
    }
}