Car Rental System
Base design hotel jaisa hi hai: VehicleType (SUV, Sedan), Vehicle, Reservation with date range, aur overlap-based availability. Naya element hai LOCATION — pickup aur drop-off alag ho sakte hain, isliye vehicle ka current location track karna padta hai.
One-way rental ka matlab hai ki gaadi drop location ki inventory mein add ho jaayegi. Ye batana ki "one-way rental inventory imbalance paida karta hai aur uske liye extra fee ya rebalancing chahiye" — ye business samajh dikhata hai aur interviewer ko impress karta hai.
class Reservation {
VehicleType type;
Location pickupLocation, dropLocation;
LocalDateTime from, to;
}
interface PricingStrategy {
// daily rate + one-way surcharge + insurance add-on
Money price(Reservation r, Vehicle v);
}
class VehicleInventory {
// Location badalne par vehicle doosri location ki inventory mein chala jaata hai
void completeTrip(Vehicle v, Location dropLocation) {
v.setCurrentLocation(dropLocation);
v.setStatus(VehicleStatus.AVAILABLE);
}
}- Core hotel booking jaisa — date range overlap par availability
- Pickup aur drop location alag ho sakte hain, vehicle location track karo
- One-way rental inventory imbalance banata hai — surcharge ya rebalancing
Vehicle ke states: AVAILABLE → RESERVED → RENTED → RETURNED → (INSPECTION) → AVAILABLE. Beech mein UNDER_MAINTENANCE bhi aa sakta hai. Har state se agla valid state fixed hai.
Inspection step zaroor mention karo — gaadi wapas aane par damage check hota hai, aur damage mile to wo turant available nahi hoti. Ye real rental business ka step hai aur domain samajh dikhata hai.
enum VehicleStatus { AVAILABLE, RESERVED, RENTED, UNDER_INSPECTION, UNDER_MAINTENANCE }
void returnVehicle(Vehicle v, InspectionReport report) {
v.setStatus(VehicleStatus.UNDER_INSPECTION);
if (report.hasDamage()) { billing.chargeDamage(...); v.setStatus(UNDER_MAINTENANCE); }
else v.setStatus(VehicleStatus.AVAILABLE);
}Rental price kai components ka jod hai: base daily rate, distance charge (agar limit cross ho), one-way surcharge, insurance add-on, late return penalty, aur fuel charge. Har component ek alag rule hai.
Inhe ek PricingStrategy ke andar chain karo — isse naya charge add karna ek nayi rule class hai. Ye Decorator ya rule-chain dono se ho sakta hai; kisi ek ko choose karke justify karo.