Careeroza
Real World Example
Uber-style Ride Fare
Ride apps calculate fares in the same steps (base fare, distance charge, surge) but each ride type has different rates. An abstract class keeps the flow in one place.
Example
public class Main {
public static void main(String[] args) {
Ride[] rides = { new AutoRide(), new SedanRide(), new BikeRide() };
double km = 8.5;
double surge = 1.2;
for (Ride r : rides) {
System.out.printf("%-6s %.1f km -> Rs %.0f%n", r.type(), km, r.fare(km, surge));
}
}
}
abstract class Ride {
abstract String type();
abstract double baseFare();
abstract double perKm();
double surgeAllowed(double surge) {
return surge;
}
final double fare(double km, double surge) {
double amount = baseFare() + perKm() * km;
return Math.round(amount * surgeAllowed(surge));
}
}
class AutoRide extends Ride {
String type() { return "Auto"; }
double baseFare() { return 30; }
double perKm() { return 15; }
@Override double surgeAllowed(double surge) { return 1.0; } // regulated: no surge
}
class SedanRide extends Ride {
String type() { return "Sedan"; }
double baseFare() { return 60; }
double perKm() { return 22; }
}
class BikeRide extends Ride {
String type() { return "Bike"; }
double baseFare() { return 20; }
double perKm() { return 8; }
}Output
Auto 8.5 km -> Rs 158 Sedan 8.5 km -> Rs 296 Bike 8.5 km -> Rs 106