第二单元小结
一 设计策略
1.FAFS电梯
经典的生产者消费者模型,结合单例Handler。
电梯硬编码,30行左右解决。
2.ALS电梯
仍是生产者消费者模型,但在电梯中加入捎带队列,每层楼进行tray和捎带队列的更新
3.SS电梯
Worker-Thread模式,建立多个电梯线程并对乘客进行选择。
在捎带算法上仍有较大问题,以至于6,7次作业中测都有点没过。之后会根据代码再做修改。
(笔者与人交际甚少,没有讨论的机会,只能学习在git上的开源代码了,至于设计模式,由于参考书上的12种设计模式大多都阅读并完成过,还算比较熟悉。总体而言,对自己这一单元的的学习情况不甚满意。)
二 程序分析
1.FAFS电梯
类图:
度量分析:
BUG分析:
由于电梯硬编码且仅仅是对生产者消费者模型实现,因此没有BUG,且复杂度较低。唯一的问题是ctrl+d模拟结束输入时,需要新添加输入结束标志。
2.ALS电梯
类图:
度量分析:
复杂度有两处较高,原因是每层楼均需要对两个队列进行更新。
由于自己的调度算法出错,公测有一个测试点没过。
3.SS电梯
类图:
度量分析:
由于调度算法缺失(第六次作业的问题尚未解决),仍然采用了FAFS,导致强测超时。
三部电梯互相争抢乘客,并把不符合的乘客放回等待队列。因此workerThread.run方法复杂度较高。
三 心得体会
课下阅读完《图解Java多线程设计模式》并对书中内容进行实践,这本书解决了我大部分的设计问题,但是关于调度算法的问题并没有解决。以至于6,7次作业效果不佳。之后应该会阅读同学在git上开源的代码,解决自己在调度算法上的疑惑。