SOLID Principle:
entry gate: checks for spot availability and issues ticket and assign spot
exit gate: release spot and fare estimation
priceCalculationStartegyInterface: fareestimation
ocp: priceCalculation strategy open to introducing new calculation strategies wityhout modifying existing ones
parking Spot Finder can also be made extensible my introducing interface in future to adhere to ocp
Liskov Substitution: derive price calculation strategies have all the propertiers of parent priceCalculationStrategyInterface
Interface Segmentation: derifed classes of priceCalculationStrategyInterface dont have to implement unncessaey functions
Dependency Inversion: instead of tight coupling and depending on concrete classes for price calculation, we pont to priceCalculationStrategyInterface
mutex locks help with concurrency, future enhancement: floor wise locks for independednt locking floor wise
availbaleSpotsCount help vaildatespot availability in O(1)
spot finding in 0(floorCount* spotCount*3)