----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
1.交通管理系统的项目需求分析
通过画图,可以分析一共有十二条路线,经综合分析,只需要考虑其中的四条路线即可
从南来的 去往 北的车辆---------------------------直行
从南来的 去往 西的车辆---------------------------左拐
从东来的 去往 西的车辆---------------------------直行
从东来的 去往 南的车辆---------------------------左拐
黄色信号灯,时间短可以先不考虑,只考虑红绿灯
根据生活习惯分析,放行的步骤是
直行---------> 拐弯---------> 直行
其中右拐弯,不受信号灯的限制
变灯时间通话线程sleep方法来描述
2.面向对象的分析与设计
面向对象设计把握一个重要的经验:谁拥有数据,谁就有对外提供操作这些数据的方法
例如:人开门 人开车 售后员统计收获小票的金额 等。。
通过需求分析有三个对象 交通道路Road 交通灯Lamp 交通灯控制器LampController
交通道路一共有12条,所以需要12个对象
每条路随机产生一些车辆,存入一个集合当中,这些车辆每个一秒去检查交通灯是否为绿色,是绿色就通过
交通灯是对应着道路来说的,因此交通灯也有12个,采用枚举类其中有可以是灯变绿,变红的方法
其中变红灯的方法中应有是下一个等变绿的代码。
12个交通灯中,有4个灯不受红绿灯限制,8个受红绿灯的限制
这个8个灯相互对应的,在编程的过程中只考虑4个就可以啦。
LampController类是控制交通灯,变绿和变红。
3.代码的实现
(1)Lamp 交通灯
package com.chongchong.interview;
/**
* 交通灯枚举类
* @author hao
*
*其中这个系统中有12个灯 每个对象都有都有 是否是绿的的状态lighted 相对应的灯opposite
*
*下一个等 next
*/
public enum Lamp {
//通过分析只要这四个灯受红灯控制即可
S2N(false,"N2S","S2W"),S2W(false,"N2E","E2W"),E2W(false,"W2E","E2S"),E2S(false,"W2N","S2N"),
//下面的灯为上面等对应的相反的灯
N2S(false,null,null),N2E(false,null,null),W2E(false,null,null),W2N(false,null,null),
//下面的灯为右转弯的灯 不受红灯的限制的
S2E(true,null,null),E2N(true,null,null),N2W(true,null,null),W2S(true,null,null);
//交通的的状态
private boolean lighted;
//与之对应的交通灯
private String opposite;
//下一个交通灯
private String next;
//判断现在 交通的的状态 绿灯为true 红灯为false
public boolean isLighted() {
return lighted;
}
//是交通等变为绿色
public void light(){
this.lighted= true;
//与其相反的灯 也要变成绿色
if(opposite != null)
{
Lamp.valueOf(opposite).light();
}
System.out.println(this.name()+"和"+this.opposite+"灯变绿啦。。。汽车开始走啦");
}
//使绿灯变为红色
public Lamp lightOut()
{
this.lighted=false;
if(opposite != null){
Lamp.valueOf(opposite).lightOut();
}
//使下一个等变为绿色
Lamp nextLamp = null;
if(next != null)
{
nextLamp = Lamp.valueOf(next);
System.out.println("变灯啦");
nextLamp.light();
}
return nextLamp;
}
//交通灯的构造方法
private Lamp(boolean lighted, String opposite, String next) {
this.lighted = lighted;
this.opposite = opposite;
this.next = next;
}
}
(2)Road交通道路
package com.chongchong.interview;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* 交通道路Road
* @author hao
*
*有12条道路,每条道路在创建时,随机产生一些车辆,存入一个集合当中
*每条道路每个一秒会看一下交通灯,如果为绿色 就使第一辆车通过
*/
public class Road
{
//交通路集合
List<String> vechicles = new ArrayList<String>();
//交通路的名字
private String name;
//交通路的构造方法
public Road(final String name)
{
this.name = name;
//模拟道路上的车辆
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.execute(new Runnable() {
public void run() {
for(int i = 1 ; i< 1000; i++)
{
try {
Thread.sleep((new Random().nextInt(10)+1)*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
vechicles.add(name +"_"+ i);
}
}
});
//道路每隔一秒会检查灯是否为绿色 为绿色就放行一辆车
ScheduledExecutorService time =Executors.newScheduledThreadPool(1);
time.scheduleAtFixedRate(
new Runnable() {
public void run() {
if(vechicles.size()>0)
{
boolean light = Lamp.valueOf(name).isLighted();
if(light)
{
System.out.println(vechicles.remove(0)+"正在过马路 traversing");
}
}
}
},
1,
1,
TimeUnit.SECONDS);
}
}
(3) LampController 交通灯控制器
package com.chongchong.interview;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* 交通灯控制器
* @author hao
*
*控制红绿灯
*/
public class LampController {
//当前灯
private Lamp currentLamp;
//每个10控制交通灯 变红和变绿
public LampController()
{
//一开始使S2W为绿灯
currentLamp = Lamp.S2W;
ScheduledExecutorService time = Executors.newScheduledThreadPool(1);
time.scheduleAtFixedRate(
new Runnable(){
public void run()
{
System.out.println("计时器启动");
currentLamp= currentLamp.lightOut();
}
},
10,
10,
TimeUnit.SECONDS);
}
}
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------