//strategy design pattern
interface DeliveryStrategy{
public void deliver
(String product
); }
class StandardDelivery implements DeliveryStrategy{
@Override
public void deliver
(String product
){ System.
out.
println("Delivered "+product
+" using Standard Delivery"); }
}
class ExpressDelivery implements DeliveryStrategy{
@Override
public void deliver
(String product
){ System.
out.
println("Delivered "+product
+" using Express Delivery"); }
}
class SameDayDelivery implements DeliveryStrategy{
@Override
public void deliver
(String product
){ System.
out.
println("Delivered "+product
+" using Same Day Delivery"); }
}
class PickupDelivery implements DeliveryStrategy{
@Override
public void deliver
(String product
){ System.
out.
println(product
+" Ready for Pickup"); }
}
class DeliveryContext{
private DeliveryStrategy strategy;
public DeliveryContext(DeliveryStrategy strategy){
this.strategy = strategy;
}
public void setStrategy(DeliveryStrategy strategy){
this.strategy = strategy;
}
public void processDelivery
(String product
){ strategy.deliver(product);
}
}
public class Main{
public static void main
(String[] args
) {
DeliveryContext context = new DeliveryContext(new StandardDelivery());
context.processDelivery("Laptop");
context.setStrategy(new ExpressDelivery());
context.processDelivery("Moblie");
context.setStrategy(new SameDayDelivery());
context.processDelivery("Book");
context.setStrategy(new PickupDelivery());
context.processDelivery("Anything");
}
}