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