刚开始做开发的那段时间,我比较着迷于一样东西:电梯。之所以会对电梯比较感兴趣,是因为电梯里面有很多编程开发用得着的东西,而且,即使是受过良好教育的人,也经常按错按钮,比如想上楼的时候,却按成了下楼,就像下面这样:
有些人应该有这样的经验。
按的人并没有错,因为他肯定在想:我要上楼,总得先让电梯下来吧。为什么我会知道,因为我也这样按过^_^
但是从电梯设计者的角度来看,⬆ 就表示电梯准备行进的方向是上行,⬇ 就表示电梯准备行进的方向是下行。角度不一样而已。
如果仅仅只是这一点东西,肯定是不够看的。电梯其实是比较复杂的一个系统。我曾经试着画过它的运行状态图,但是画来画去,经过很多次修正之后发现,原来电梯的运行状态图和编程语言中经常提起的多线程生命周期极其相似:
电梯的维修 = 线程的挂起
电梯无人时 = 就绪状态
电梯运行时 = 运行状态
这其实是一幅高度精简和抽象的状态图,因为电梯实际运行过程肯定是有很多场景在其中的。细细想来,可以设想当电梯正常运行时,会有如下场景:
l 如果狗蛋在五楼,二丫在九楼,电梯在一楼
v 当狗蛋想下楼,而二丫想上楼的时候,电梯会怎么运行呢?(先进先出FIFO?)
v 当狗蛋想下楼,而二丫也想下楼的时候,电梯会怎么运行呢?(先接二丫?)
v 当狗蛋想上楼,而二丫想下楼的时候,电梯会怎么运行?(先到五楼接狗蛋?)
v 当狗蛋想上楼,而二丫也想上楼的时候,电梯会怎么运行?(先到五楼接狗蛋?)
l 如果狗蛋在五楼,二丫在九楼,电梯在十楼,出现上面的四种情况又会怎么处理呢?
l 如果狗蛋在五楼,二丫在九楼,电梯在七楼呢?
l 虽然电梯有超重设置,但其实在超重和正常承重量之间还是有临界值的,仔细想想:
v 如果处于临界值,当电梯上行时,它会怎么处理?
v 如果处于临界值,当电梯下行时,又会怎么处理?
这还只是两个人的场景,我们日常生活中的电梯,尤其是写字楼中的电梯,每天不知道有多少人等在多少层楼的门口,大家的目的地都不一样,电梯运行是的判断条件应该会比上面列出的更复杂一些。
但不管有多么复杂,只要能够把上面的这些想明白并实现了,就是一名合格的工程师。
(PS:括号里面列的只是参考,实际如何运行,可能会由不同电梯公司的代码决定)