学习笔记-java编程-交通灯管理器设计流程。

先抛出需求:

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

例如:

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

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

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

       。。。

 

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

 

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

 

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

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

 

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

 

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

 

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

 

这里使用面对对象的思想对问题进行解析

首先对路口车辆路线进行建模,发现有12条路线

其中可以分为三组:

    由南向而来去往北向的车辆和其相对方向 ---- 直行车辆

       由西向而来去往南向的车辆和其相对方向 ---- 右转车辆

       由东向而来去往南向的车辆和其相对方向 ---- 左转车辆

其中,右转车辆又是不受红绿灯控制的,可以理解为所有右转车辆路线绿灯为常亮状态。

而红绿灯中绿灯(亮)  红灯(不亮)可以利用灯亮不亮这样来表示。

 

现在设计路线的模型Road,

总共12条路线,所以要实现12个类。基础模型为,设计一条线程,随机的时间内增加一辆车到集合中,

再设计一条线程每隔一秒种检查一次红绿灯,若为绿灯(亮),则从路线车辆集合中删除第一个元素,视为该车通过路口。

路线的模型设计完毕。

 

设计交通灯模型Lamp。

这里交通灯是对应于每一条路线的,所以要设计12个来对应路线。但是路线是固定的,所以交通灯可以设计为枚举类型。

总共有12个元素。

每隔交通灯实例对象里要有 灯亮的标志位:lighted

获取标志位的方法:islighted()

控制灯亮的方法:light()

控制灯灭的方法:breakOut()

这里我们可以根据上面分析的三组情况,把交通灯分为三组

我们只要控制四个方向的交通灯就可以了,其中右转的灯是常亮的,所以可以设置light为true

由南向北,由南向西,由东向西,由东向南,只要控制这四个方向的灯,就可以控制对应相对方向的灯,因为相对方向的灯都是相同状态的。

所以这里就可以设置一个三个构造参数的灯,

分别是相反方向的灯:String opposite

 灯灭后下一个亮的灯:String next

和该灯原本的状态:boolean lighted

到这里Lamp模型设计完毕。

 

现在,路线模型、交通灯模型设计完毕了,还需要一个交通灯控制器来控制灯的变化,从而实现交通的运行。

根据现实情况,只有一条路线和其相对的路线可以同一时间运行车辆。

所以这里控制系统需要先控制其中一条方向灯为亮(对应方向的灯也会被打开)

使用定时系统,例如每隔10秒钟切换一次路线

设一个当前行驶路线的灯,置为亮。

每次灯灭的时候就把下一个变亮的灯设置为当前路线行驶灯。

到这里,控制器就设置完毕了。

转载于:https://www.cnblogs.com/ecoz/p/3776529.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值