A Deep Dive into Parking Spot LLD Design
Tags: lld, systemdesign, java, oop
Published: 2023-08-18 13:43:15

Greetings, dear reader! 🌟

In this blog, we're crafting functional and super-efficient parking spots. And guess what? We're diving into **design patterns** to make them even smarter and more effective. **So reading.start()**🚗💡



## Responsibility



🚗 **Vehicle Entry and Exit:** Finding the appropriate parking spot for the vehicle and creating the ticket.

🅿️ **Parking Spot Allocation:** Efficiently allocate available parking spots to incoming vehicles based on factors like size, type, and user preferences.

💰 **Cost Computation and Payment:** Calculate parking costs based on duration and vehicle type, offering flexible payment options for users.

🏆 **Parking Strategy Options:** Different parking strategies (e.g., park near entrance, park near elevator) should be available to users and prioritize spot allocation based on user preferences and vehicle type.

## Our Parking Model Lineup  🌟


1. ParkingSpot 🅿️
2. Vehicle 🚗
3. ParkingSpotManager (EntranceManager and ExitManager) 🅿️
4. Ticket 🎫
5. ParkingSpotType and VehicleType (enum) 🚗
6. ParkingStrategy 🚦
7. CostConfiguration 💸
8. CostComputationStrategy💰  


##ParkingSpot Interface 🚗🏍️ 

🚙 The **ParkingSpotManager** holds a collection of **ParkingSpot** catering to various Vehicle types (2-wheelers and 4-wheelers).

🛠️ To achieve this, we'll create an **interface** that Concrete Classes (like twoWheelerParkingSpot and FourWheelerParkingSpot) can implement.

🏁 Additionally, it employs a **ParkingSpotType** enumeration to categorize the types of parking spots available.

🚀 The benefit of employing this interface is that if we decide to introduce a new type of parking spot later on, we can simply create a class that adheres to the interface.



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tj7hgsauk5opw890a9ql.png)



🅿️**ParkingManager**: Central hub for parking spot management, handling addition/removal, spot allocation, ticket creation, and price computation.

🚗**EntranceManager**: This manager is responsilbe for efficiently allocating parking spots to incoming vehicles based on vehicle types and parking strategies and Generating the ticket. 

🚦 **ExitManager**: Calculate parking fees using a Cost computation strategy considering duration and spot type. 
 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m5orry94bid3u0pfdfk9.png)


## Finding the Right Spot for you Vehicle 🚗

🚀Imagine the **EntranceManager** as a matchmaker for vehicles.

🎯 It take two parameter: a **vehicle** to know vehicle type, and a **ParkingStrategy** to understand the user preference.

💡Using this, it finds the right parking spot and makes a **ticket** for that vehicle and strategy.

🚫After the successfull allocation of the spot, the spot in marked as the occupied and hence not available for the other Vehicle.


🎉 Unraveling the Magic:
You might notice our usage of 

```
Optional<Ticket>
```
In essence, an Optional acts as a container that may or may not hold a ticket. Optional are used to avoid null check if object not found




![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gr3dluoax2zc2rzep2r7.png)

##🎩 Exit Manager: Calculate your Parking Fare!

🚗 When your trusty vehicle bids adieu and rolls out from the parking haven, the Exit Manager springs into action.

💰By summoning the mighty **Cost Computation Strategy** (including the HourlyCostComputation and DailyCostComputation) and  your ride **Duration** ,it crafts a fair and fancy price tag🤑.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ivs4s7vczgxq073v4aym.png)




After we have combined all the stuff here is the complete Diagram.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w1m30frm180pe52tj9ky.png)



🌟 Thanks for joining our parking adventure!😊

💬 If you enjoyed reading this blog,please take a moment to share your thoughts by leaving a review and liking it 😀

🚗 Stay tuned for our next blog, where we'll dive into an exciting coding demo of this smart parking system. Keep your engines running! 🎉