停车场,OOP设计 - 定制设计

时间:2012-02-26 14:57:37

标签: oop system-design

我正在研究停车场的例子,并且在设计时做了一些假设。

在为项目/对象分配属性时,我有几个问题。

1)如果系统没有分配parkingSpace,即用户只是进入Lot,找到一个合适的地方(汽车/自行车/卡车/残障人士)并停放他的车。

我认为我不需要ParkingSpace对象,相反,我可以为每个category_of_parking_space保留no_of_free_places的数量。

由于停车位很大,我们只保留三个变量。

  • no_of_free_slots_Car
  • no_of_free_slots_Bike
  • no_free_slots_Truck
  • no_free_slots_Handicapped

当车辆进入时,我们只减少上述值中的一个(这意味着可用的X位置,用户选择一个并在那里停车),&当车辆熄火时,我们增加相应的值。 (简而言之,停车场不是由任何人分配的,车辆只能到达其中一个符合条件的地方和公园)

2)假设我们有一个全球停车计时器。
- > start_time / end_time应该是Vehicle的属性吗?

- > vehicle_id,start_time,end_time是ParkingMeter的一部分。

3)假设需要parkingSpace对象,4_wheeler,2_wheeler,disapped应该是枚举类型,还是单独的类。
如果它的枚举,我们可以使用findEmptySlot(parkingSpace_type);
如果它们是完全独立的类,并且ParkingLot有一个方法findEmptySlot();
我们怎样才能得到合适的Slot?

ParkingMeter将负责设置车辆的开始,结束时间对吗?

如果有多个金额,1小时 - 20美元,2小时 - 30美元,3小时 - 40美元,5小时 - 50美元 拥有ParkingMeter类的这些部分是好还是将它们包含在一个单独的类“ParkingPrice”

1 个答案:

答案 0 :(得分:2)

好,

  1. 我真的不明白这个问题,但我确实会使用数组ParkingSpace对象来描述公园里的空间。
  2. 由于时间是每辆车,因此应在车辆上设定时间。
  3. 我为每个使用不同的类,每个类都应该扩展抽象类Vehicle。它允许灵活地使用每种车辆类型的共同和独特属性(所有车辆的序列号,但是例如只有4_轮车具有门)。至于如何找到空的停车位,每个ParkingSpace对象将具有$takenBy属性,该属性将保持车辆对象的实例占据它。它应默认为null,然后,您只需遍历ParkingLot类中的空格数组,找到$space->takenBy == null的空格数组。