黑马程序——交通灯管理系统 (黑马我来了之十二)

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

下面,让我们来看看这个交通灯管理系统的各种需求:

 

1. 异步随机生成按照各个路线行驶的车辆。

例如:

       由南向而来去往北向的车辆 ---- 直行车辆

       由西向而来去往南向的车辆 ---- 右转车辆

       由东向而来去往南向的车辆 ---- 左转车辆

       。。。

 

2. 信号灯忽略黄灯,只考虑红灯和绿灯。

 

3. 应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。

 

4. 具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑。

注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。

 

5. 每辆车通过路口时间为1秒(提示:可通过线程Sleep的方式模拟)。

 

6. 随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置。

 

7. 不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。

 

张孝祥老师对交通管理灯的分析:一个十字路口,有 东、西、南、北四个基本路口,每个基本路口可以向右、向前、向左拐,所以一共有四乘以三等于十二条基本路线,除去向右拐的不管(当然也要在代码中写上),还剩下八条,而八条路线则是两两相反的,所以只需要考虑四条就可以操纵整个交通系统了!据张老师说这是由于他善于观察生活的缘故,这一句话提醒了我良多!确实,我觉得做开发的得善于观察生活才行,但是要探寻生活的本质可不是一件简单的事情,就这交通灯的开发吧,一般人绝对想不到这般深度,真是绝了!

下面来分析交通管理灯系统的个主要的类:

 

Road类:

还是昨天那句话“谁拥有数据,谁就对外提供操作这些数据的方法。”,所以路上有车,路就提供了增加车和减少车的方法,分别用了两个计划线程池(Executors.newSingleThreadExecutor())来完成这两个事,而这让我想到了昨天看的的那个银行业务调度系统中的的号码管理器(NumberManager),它没有用两个单独的线程池,而是用了synchronized这个互斥关键字,然后让其他线程池中的线程来调用它当中的两个对号码的操作方法。至于车,就用用一个ArrayList集合来表示,而且用到了泛型,以很好的对此集合的类型进行限制,具有更好的可读性。

 

Lamp枚举

其实在学高新技术的时候张孝祥老师就演示过,枚举不过是一个特殊的类罢了,但是用枚举比自己构造一个类似枚举的方法可简便多了,可以节约不少时间。而(交通灯)Lamp枚举封装了十二条基本路线的名称,每条路线的构造方法(右转的灯永远是亮的,规则如此,然后将八条中的四条设置为另外四条的对立面,对面的动作,就是我的动作),以及交通灯应有的方法,如亮灯、熄灯。在blackOut()(熄灯)这个方法里面,还把点亮并且返回下一个灯也写了进去,这个想法很有创造性,而其中有个name()方法是我看视频时不太懂的一个地方,因为枚举里面并没有任何地方创建了这个变量,但是在第二次看视频的时候隐隐约约听见张老师讲,这个枚举自身的方法,然后我就去查文档,果然有个name()方法,但文档中建议最好使用toString()方法返回当前枚举的名称,因为它返回的名称更具有友好性,呵呵,由此便学到了一点小技巧。而这个类也展示了在开发中如何使用枚举,给我们提供了一个很好的例子,受益匪浅呐!

 

LampController类

这个灯控制器类其实就很简单了,但是也很经典,简单是因为它的代码不多,经典是因为它的线程池里面只运行了最核心的currentLamp = currentLamp.blackOut();这个方法就是我刚才在Lamp枚举里面说的,很有创造性的想法,它点亮了目前的灯,又返回了下一个灯。灯控制器只需要启动四条核心路线中的一跳路线上的灯,就可以利用该线程池循环currentLamp = currentLamp.blackOut();方法,令四条核心路线的等都能在同等时间内,依次点亮和熄灭,然后再写一个主类,创建十二条不同的路线,然后启动灯控制器,就可以让这他们运转起来了,从而一个交通管理灯就完成了,真是太神奇了!

 

学完这章,我有些想法,灵感都是源于生活的,懂生活的人都是善于观察的。想要做好一件事情,就要去探寻他的轨迹,寻找它的本质,一旦了解了它的本质,解决起来也就简单多了。看似困难的问题无非就几个核心问题得不到解决而已,想要做一个好的程序员,先要做一个善于观察生活的人。

     

    以上,就是我今天的学习笔记。

    大鹏一日同风起,扶摇直上九万里。


---------------------- android培训java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值