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

来源:互联网 发布:知乎live是什么 编辑:程序博客网 时间:2024/05/16 17:20

-----------android培训、java培训、java学习型技术博客、期待与您交流! ------------

要求:模拟实现十字路口的交通灯管理系统逻辑 

思考:

1.     与十字路口相关的物体有:公路、信号灯、车辆、交通灯控制系统;

2.     通过十字路口,有十二种行驶方式,每种行驶方式都有车辆采用,不断重复驶向十字路口--驶离十字路口的动作,当然车辆是不确定时间增加的,绿灯状态下,车才能通过十字路口;

3.     信号灯有两个状态,绿灯和红灯,可用逻辑值表示这两个状态,有在红绿灯间切换的行为;

4.     车辆有许多个,在十字路口处有红灯等待和绿灯开动两个状态;

5.     一个十字路口只存在一套交通灯控制系统,它实现信号灯的红绿灯切换行为,因右转的车辆不用信号灯控制,则十二个行驶方向只需要8个信号灯。鉴于信号灯是成对地变化的,故实际上只用操作其中四盏即可。

解题思路:

1.     需要创建三个对象,车可用字符串替代,不能通过十字路口时,其行驶方向上会增加该车,驶过十字路口时会该车会驶离,用字符串的增加与删除即可实现这一逻辑,不用创建对象;

2.     创建Road类,用该类实例表示车辆行驶方式,每种行驶方式上车的数量不确定,应使用集合存储车,即字符串,需实现增加和删除字符串的方法;而行驶方式间相互独立,故需创建独立线程。而车驶来与驶离的动作同时存在,每个实例中需建立两个线程,一线程保证不定时地有车要通过十字路口,另一线程每隔一段时间检查信号灯状态,保证绿灯时车通过十字路口;

3.     创建Lamp类,经过之前分析得知需要创建8个信号灯实例,建议使用枚举,为了统一,向右转的行驶方向也设置信号灯,不过信号灯一直为绿灯;因信号灯成对变化,故信号灯须标记其相反方向信号灯,信号灯间交替变化,该灯变红后,必然有灯变绿,故信号灯也应标记接下来变化的信号灯,只需让4个信号灯记录相反方向和接下来的信号灯,故类中有三个成员,两个记录信号灯,一个标记红绿灯状态,对外提供三个方法:检查红绿灯状态的方法,变绿灯的方法,变红灯的方法;

4.     创建LampController类,因其唯一性,应使用单例设计模式。它实现了12个信号灯的交替控制,在该类中须记录当前控制的信号灯,系统启动后,当前灯变绿,每隔一段时间,当前控制的信号灯会发生变化。

5.     在主程序中,创建十二种行驶方式,启动一套控制系统。

要点:

1.     枚举(因枚举元素只能定义后才能保用,在构造函数中用字符串形式表示反方向和接下来的信号灯);

2.     多线程:线程池和定时器;

3.     单例设计模式;

4.     面向对象设计重要经验:谁拥有数据,谁就对外操作操作这些数据的方法。

0 0