/LiftSystem

based on object oriented programming

Primary LanguageJavaMIT LicenseMIT

LiftSystem

电梯系统

使用面向对象编程(Object Oriented Programming)设计一个支持多台垂直电梯的电梯系统。

主要类型:

楼层控制面板(Floor Control Panel)

  • 面板需支持呼叫“向上”和“向下”的电梯。
  • 面板需支持查询当前正在进行中的呼叫。
  • 重复呼叫同一方向的电梯没有效果。
  • 底层呼叫向下电梯没有效果。
  • 顶层呼叫向上电梯没有效果。
  • 电梯(Elevator)
  • 电梯需支持查询当前楼层。
  • 电梯需支持输入新的目标楼层操作。
  • 电梯需支持查询当前所有的目标楼层。
  • 电梯需支持一个“去下一个”(Go to Next)的操作。(详见“行为预期”)
  • 输入超过范围的楼层没有效果。
  • 输入与当前楼层相同的楼层没有效果。

呼叫服务(CallService)

  • 用于记录来自所有楼层面板的呼叫请求。
  • 给行进中的电梯提供“顺路”的呼叫请求。(详见“行为预期”)
  • 给闲置的电梯提供的呼叫请求。(详见“行为预期”)

“Go to Next” 的行为预期

  • 若没有来自楼层的呼叫请求
  • 闲置状态的电梯会前往最近的目标楼层。
  • 向上行进的电梯会前往高于当前楼层的最近一个目标楼层。若没有更高的目标楼层但有更低的目标楼层则开始向下行进。
  • 向下行进的电梯会前往低于当前楼层的最近一个目标楼层。若没有更低的目标楼层但有更高的目标楼层则开始向上行进。

若当前楼层和最近目标楼层之间有呼叫请求

  • 若呼叫方向与当前电梯行进方式一致,则电梯会前往呼叫楼层进行顺路拾客。
  • 若呼叫方向与当前电梯行进方向相反,则电梯会忽略该请求。

若没有目标楼层

  • 若没有呼叫请求,电梯会继续保持静止。
  • 若有呼叫请求,电梯会前往其中一个呼叫中的楼层(开放性题目,没有最优答案)。

其它tips

  • 可假设合理的电梯和楼层数量
  • 无需考虑电梯行进所需要的时间
  • 无需考虑机械层面的复杂性(包括电梯门,马达等)
  • 允许加入新的类、变量和函数用于答题
  • 允许使用本地熟悉的编程环境进行开发和调试(完成后需要将答案粘贴至此)
  • 建议提交前使用测试用例进行自测
  • 答案代码长度应为200-400行左右,最多不要超过600行