if not available it rejects request
if available, it assigns parking spot , requests parking spot manager to update the status of parking spot occupancy and creates the ticket
SOLID Priniciples: Single responsibility: entry gate only checks for availability through parking spot manager and issuing ticket, parking spot manager checking parking lot class to check and update availability
use of interfaces and derived classes for open close principle in case of parking spot finder and price calculator
Liskov substitution: inherited classes contain all the properties from parent class.
Dependency Inversion: using interface class to create instance instead of concrete derived classes
throwing exceptions if floor or spot being updated is invalid and locks for thread safety