黑马程序员--java 交通灯管理系统

本文介绍了交通灯系统的面向对象设计思路,包括对交通灯变化过程的分析、模块化设计方法,以及具体的Road类和Lamp类的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


---------------------- android培训java培训、期待与您交流! ----------------------


设计前的知识储备--面向对象的重要经验:谁拥有数据,谁就对外提供操作这些数据的方法。

通过老师讲解我似乎理解了一些,但又不是很透彻,看来自己还需要更多的去体会,思考领会。

设计的思路:

1、分析这个交通灯系统,先按事件发展的时间顺序纵向分析过程,交通灯是怎么变化的,变化后路上的车行驶方向怎么变化的。在这个过程中,要去除重复性问题的考虑,简化问题,比如,主要就只需要考虑四个方向的灯亮灭问题,另外也只需要考虑两个方向的车辆通断变化问题。

2、横向分析所要建立的各个模块如何实现,分别需要实现什么功能,先是设计了灯的类,先存储了各个灯的变化情况及其取值范围,这个过程分析的越仔细越准确,就越有利于我们选择出最合适的设计程序的方法,再者又设计了反映道路通断的Road类,并在这个类中依据灯变化情况提供操作车辆的方法。


类的编写:


Road类的编写:
在这个类里面,要让上面跑满汽车,并且是随机的增加的,并且交通灯每一次变绿,就要减少一辆汽车。
要让上面跑满汽车,这就需要创建一个线程,首先让这个线程产生一定数量的汽车,为了模拟真实性,可以让他中间休息一段时间,这样来看,就不会一下子把所有的汽车一下子全部创建完成。可以把创建的这些汽车放到一个集合中。创建完汽车以后就应该考虑交通灯变绿使汽车减少这一个问题,可以考虑设定一个定时器,每隔几秒检测一下交通灯是否已经变绿。如果交通灯已经变绿,就应该考虑从集合中拿走数据。这样就可以知道那个车已经开走了。总体来说,这个类里面就是定义了一个产生汽车的线程和检测交通灯是否变绿的定时器。
Lamp类的编写:


       由于这个类里面的数据是固定的,就是12个交通灯,可以考虑使用枚举,这样可以使代码看起来更加的简洁。这个类里面主要考虑四个对象就可以了,因为判断四个方向的灯就可以把其他的灯代表出来,其他的灯的性质和这四个的基本相同。在这里,需要分清楚,那个灯对立的灯是哪个,下一个灯是哪个,在定义构造方法的时候就应把这些东西设定好。首先设定了取得当前灯颜色的方法,接下来,就是设置灯变绿、变红的方法,在这些方法中要考虑到相反方向的灯的情况,在变红的方法中还要考虑下个灯变绿的情况。
        在这个类中还要设计好12个到灯的情况,模拟真实的情况,如这个灯变绿后下一个灯是那个,它对应的相反方向上的灯又是那个,一些方向上的转弯是不需要观察灯的变化的,这些情况在设计的时候都要考虑进去
LampController类的编写:
在LampController类得里面,首先设置一个现在的灯是哪一个,然后再让他变绿,再然后设置一个定时器,在这个定时器里面,主要调用变红的那个方法,由于这个方法返回的是下一个变绿的Lamp,所以就可以让现在的灯变成变绿的那个Lamp。由于在定时器中不断实现这个方法,所以会一直有灯得变化。就进而有车辆的不断行驶。


       整个设计的流程就这些了,我看的不是很懂,就做到这些了,不过我会继续努力的,把这个7K给攻克掉。代码太长了,我记在本子上了,就不贴上来了。

老师在教我们的同时也把他自己的思考方式,他多年的工作经验及做人的技巧也一并教给了我们,非常感谢老师,感谢传智播客的所有的工作人员。


---------------------- android培训java培训、期待与您交流! ----------------------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值