Parking Lot System: Low Level Design
Tags: tutorial, webdev, java, programming
Published: 2023-04-24 15:07:03

This is our first blog in the series of Low Level Design. We'll start from designing and coding a Parking lot system. While coding we'll be following some design patterns that we discussed in earlier blogs, Part 1 and Part 2.

Before starting the design, one must know the Requirements and Objects of the system.

![System Design Meme](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oxw641d8rxzaa7grik4u.png)


## Requirements:-

- We have one entrance and one exit
- We have different parking spots for two, three and four wheelers
- Parking prices are based on hourly and minutes based
- There are multiple parking floors
- We have different strategies to find the parking spots like Parking Spot near to the elevator, Parking Spot near to entrance etc

## Objects Required:-

- Ticket
- Entrance
- Parking Spot
- Vehicle, VehicleType (Enum)

## Now, lets design 😎

But But But, Before coming to the design, there is one most important thing i.e. following either one of the approaches from 

- Top Down Approach
- Bottom Up Approach

> Here, In Top to Down approach we start from the system start. Here in our case our system starts from the entry of a vehicle into a Parking Space.
In Bottom to Up approach, we start from the main requirement (any) like we start from ParkingSpot and then further.

## Thought Process:-

Now, here is our thought process while designing.

- Vehicle needs to be parked at some Spot (Design a Parking Spot)
- But we have different type of vehicles (2,3,4 wheelers) so make ParkingSpot as an interface and extend to TwoWheeler, ThreeWheeler and FourWheeler ParkingSpot.

![Parking Lot System Design](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iickpxt2o54elg3hu3t1.png)

- Now, we have ParkingSpots but to manage these ParkingSpots we have to make a Manager (ParkingSpotManager) which will be a centralized place to control the ParkingSpots.
- Here, we have a Parking Strategy (Strategy Pattern) that has different implementation.
- We have has-a relation which says it is not a child but it has an instance of that class

![Parking Lot system manager](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kkhaqcio12iacv6byxa1.png)

- Now, coming to Entrance and Ticket, we have entrance from where a person collects his ticket to park a vehicle. So, it should have a Ticket, Parking Spot Manager to find parking and all.

![Parking Lot System](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y35sacv5y9jw1a8bc8vd.png)

- Now, we have to include the Price on the ticket and price can be assigned from the entrance itself. Now, Price could be different and can have multiple implementations. 

![Parking Lot System](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c7cjgcja76lpocbehscf.png)

- Now, It might look a mess to you, But at the end combining all the stuff, it looks like this (Sorry, if image is not clear, kindly click on the [Google Drive](https://drive.google.com/file/d/1FruWMAQVvgwAyOHpAnxXDwhxusmdTK61/view?usp=sharing) link for a High Quality Image)

![Parking Lot System](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rwmkoj7nhksigqakz37m.png)

--------

> We'll get to the code in our next blog, Follow for more updates