Java 停车场设计

2025年5月12日 | 阅读 8 分钟

在 Java 面试中,最突出的问题之一就是停车场设计。Java 停车场设计是一个设计问题,涉及车辆如何在停车场内停放。这主要是在亚马逊、谷歌、Facebook 等顶级跨国公司的 HLD 或 LLD(高级或低级设计)轮次中提出的。请注意,这个问题没有绝对正确或错误的答案。因此,这类设计问题需要与面试官进行充分的讨论,了解面试官想要什么样的停车场设计。例如,一位面试官可能希望停车场有 5 层楼,而另一位面试官则对单层停车场感到满意。

在本节中,我们将使用 Java 的面向对象范例来设计停车场。在阅读本节之前,读者需要对 Java 的面向对象原则有充分的了解。

Parking Lot Design Java

设计停车场

我们将根据下面描述的设计编写停车场的代码。

我们设计中包含的对象是车辆 (Vehicles)、停车场 (ParkingLot)、停车位 (Slots) 和楼层 (Levels)。

停车场 (ParkingLot): 有 'x' 层或楼层,每层有 'y' 个停车位。

楼层 (Levels): 每一层都是一个独立的实体,包含楼层号、其停车位以及其中的车道。

车道数量是根据停车位数量设计的。在本例中,10 个停车位构成 1 条车道。

停车位 (Slots): 一个停车位与其他停车位是独立的。停车位大小对车辆停放至关重要。例如,一个大车辆无法停放在一个小车位里。

车辆 (Vehicles): 包含公司名称、车辆编号及其类型。车辆有车牌和其所属公司的属性。

我们已将停车位和楼层视为独立的实体,这样以后可以为楼层添加任意数量的停车位。

每当车辆进出时,代表该车辆所属公司的车辆列表都会被更新。由于车辆的进入或离开,可用停车位的数量也会随之更新。

方法

parkVehicle(): parkVehicle() 方法会相应地停放车辆,同时还会考虑制造该车辆的公司。

leaveOperation(): 该操作负责让车辆 'V' 在楼层 'x' 离开。

companyParked(): CompanyParked() 方法方便用户查看特定公司停放的车辆列表。

停车场 Java 程序

完成设计部分后,我们就可以编写代码了。下面的程序使用了上述设计来创建一个停车场。

文件名: VSize.java

文件名: Vehicle.java

文件名: Car.java

文件名: Motorcycle.java

文件名: Lvl.java

文件名: ParkingSlot.java

文件名: ParkingLot.java

文件名: Main.java

输出

Level 0 created with 2 slots
Level 1 created with 2 slots
 ------------------------------------
It is a Car parked in Lane Number 0, Slot Number 0 Level 0 with Vehicle Number 1234 from Microsoft
 ------------------------------------
It is a Motorcycle parked in Lane Number 0, Slot Number 1 Level 0 with Vehicle Number 4016 from Microsoft
 ------------------------------------
It is a Car parked in Lane Number 0, Slot Number 0 Level 1 with Vehicle Number 1609 from Google
 ------------------------------------------
The vehicles of Microsoft: 1234        4016
 ------------------------------------------
The vehicles of Google: 1609
 ------------------------------------------
Available Slots in the current level :1
Slot freed from Level 0 and exited 4016 of Microsoft
 ------------------------------------------
The vehicles of Microsoft: 1234
 ------------------------------------
It is a Motorcycle parked in Lane Number 0, Slot Number 1 Level 1 with Vehicle Number 1389 from Google
 ------------------------------------
PARKING IS FULL