system-design-learning

Parking Lot LLD Implementation

Problem Statement

Design a parking lot system that supports multiple floors, different vehicle types (Car, Bike), and flexible fee strategies. The system should allow parking, unparking, and fee calculation, and be easily extensible for new requirements.

Requirements

How to Run

Use Runner.java

Design Patterns Used

Class Diagram (Generated With AI help)

classDiagram
    class ParkingLot {
        - List~ParkingFloor~ floors
        - FeeStrategy feeStrategy
        - Map~String, Ticket~ issuedTickets
        + parkVehicle(Vehicle): Ticket
        + unParkVehicle(String): Double
        + addFloor(ParkingFloor)
        + setFeeStrategy(FeeStrategy)
    }
    class ParkingFloor {
        - int floorNumber
        - List~ParkingSpot~ parkingSpots
        + getSingleAvailableSpot(VehicleType): Optional~ParkingSpot~
        + getAllAvailableSpots(VehicleType): List~Integer~
    }
    class ParkingSpot {
        - int spotNumber
        - VehicleType vehicleType
        - Vehicle vehicle
        - boolean isFilled
        + park(Vehicle): boolean
        + unpark()
        + isAvailable(): boolean
    }
    class FeeStrategy {
        <<interface>>
        + calculateFee(Ticket): double
    }
    class FlatRateFeeStrategy {
        + calculateFee(Ticket): double
    }
    class CustomisedRateFeeStrategy {
        + calculateFee(Ticket): double
    }
    class Ticket {
        - String ticketId
        - Vehicle vehicle
        - ParkingSpot spot
        - Long entryTimeStamp
        - Long exitTimeStamp
    }
    class Vehicle {
        - String numberPlate
        - VehicleType vehicleType
    }
    class Car {
    }
    class Bike {
    }
    ParkingLot "1" o-- "*" ParkingFloor
    ParkingFloor "1" o-- "*" ParkingSpot
    ParkingLot ..> FeeStrategy
    FeeStrategy <|.. FlatRateFeeStrategy
    FeeStrategy <|.. CustomisedRateFeeStrategy
    ParkingLot "*" o-- "*" Ticket
    Ticket "1" o-- "1" Vehicle
    Ticket "1" o-- "1" ParkingSpot
    Vehicle <|-- Car
    Vehicle <|-- Bike

This diagram covers all main classes: ParkingLot, ParkingFloor, ParkingSpot, FeeStrategy (and its implementations), Ticket, Vehicle (and its subclasses).

How to Extend