------- android培训、java培训、期待与您交流! ----------
1、面向对象技巧:谁拥有数据谁就对外提供操作这些数据的方法。
2、交通灯。
思路:总共有12条路线,为了统一编程模型,可以假设每条路线都有一个红绿灯对其进行控制,右转弯的4条路线的控制灯可以假设称为常绿状态,另外,其他的8条线路是两两成对的,可以归为4组,所以,程序只需考虑图中标注了数字号的4条路线的控制灯的切换顺序,这4条路线相反方向的路线的控制灯跟随这4条路线切换,不必额外考虑。
1.Road类编写:
每个Road对象都有一个name成员变量来代表方向,有一个vehicles成员变量来代表方向上的车辆集合。
在Road对象的构造方法中启动一个线程每隔一个随机的时间向vehicles集合中增加一辆车(用一个“路线名_id”形式的字符串进行表示)。
在Road对象的构造方法中启动一个定时器,每隔一秒检查该方向上的灯是否为绿,是则打印车辆集合和将集合中的第一辆车移除掉。
2.创建线程:
ExecutorService pool = Executors.newSingleThreadExecutor(); 创建一个单独 的线程
Thread.sleep((new Random().nextInt(10)+1)*1000); //使此线程暂停一会。但是 不能存在于构造方法中
3.定时器:
ScheduledExecutorService timer =Executors.newScheduledThreadPool(1);
timer.scheduleWithFixedDelay(Runnable command,long initialDelay,long delay,TimeUnit unit)
command - 要执行的任务。
initialDelay - 首次执行的延迟时间。
delay - 一次执行终止和下一次执行开始之间的延迟。
unit - initialDelay 和 delay 参数的时间单位。
4.Lamp类编写:
系统中有12个方向上的灯,在程序的其他地方要根据灯的名称就可以获得对应的灯的实例对象,综合这些因素,将Lamp类用java5中的枚举形式定义更为简单。
5.LampController类的编写
整个系统中只能有一套交通灯控制系统,所以,LampController类最好是设计成单例。
LampController构造方法中要设定第一个为绿的灯。
LampController对象的start方法中将当前灯变绿,然后启动一个定时器,每隔10秒将当前灯变红和将下一个灯变绿。
6.MainClass类的编写
用for循环创建出代表12条路线的对象。接着再获得LampController对象并调用其start方法。