楊華
摘要:為了能夠使多個(gè)交通燈最大化協(xié)調(diào)工作,使車輛不至于在十字路口滯留的時(shí)間過(guò)長(zhǎng),我們利用Java語(yǔ)言設(shè)計(jì)十字路口交通燈管理系統(tǒng),通過(guò)系統(tǒng)對(duì)十字路口車輛及交通參與者進(jìn)行有效管理,提高十字路口交通控制水平,充分發(fā)揮路口通行能力,使其更加靈活有效地提高道路的利用率,從而達(dá)到暢通交通工程目的。
關(guān)鍵詞:業(yè)務(wù)邏輯;系統(tǒng);java;管理系統(tǒng)
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2019)05-0102-03
近年來(lái),隨著經(jīng)濟(jì)發(fā)展,城市汽車數(shù)量的增加,我國(guó)城市交通正面臨十分嚴(yán)峻的考驗(yàn),從而導(dǎo)致交通問(wèn)題的日益嚴(yán)重,其主要變現(xiàn)在:交通事故頻發(fā),交通擁堵嚴(yán)重,人們出行時(shí)間增加,日常的交通堵塞成為人們司空見(jiàn)慣而又不得不忍受的問(wèn)題,也是迫切需要解決的社會(huì)問(wèn)題。作為城市交通路網(wǎng)的關(guān)鍵部分,十字路口成為道路通行能力的瓶頸,十字路口的通行能力決定了城市交通暢通程度。因此,如何設(shè)計(jì)出智能化十字路口信號(hào)燈控制系統(tǒng),是保障十字路口交通通行能力的重要措施,是解決城市交通擁塞的有效途徑。本文我們將利用Java來(lái)開(kāi)發(fā)十字路口紅綠交通燈系統(tǒng)。
1 十字路口交通燈管理系統(tǒng)邏輯需求分析
根據(jù)我國(guó)城市交通的實(shí)際狀況及車輛行駛慣例,分析十字路口管理系統(tǒng)實(shí)現(xiàn)邏輯,具體如下:
1.1 交通參與者車輛行進(jìn)路線分析
設(shè)計(jì)生成按照各個(gè)路線行駛的異步隨機(jī)路線。例如:由西向東則直行,由西向南則設(shè)計(jì)為右轉(zhuǎn),由西向北則設(shè)計(jì)為左轉(zhuǎn)等等,各個(gè)路口車輛行駛路線如圖1所示:
1.2 路口信號(hào)燈模擬
根據(jù)十字路口交通狀況,在設(shè)計(jì)信號(hào)燈系統(tǒng)的時(shí)候,我們主要考慮以下情況:
右轉(zhuǎn)車輛不受信號(hào)燈控制,只考慮直行和左轉(zhuǎn)車輛控制信號(hào)燈;南北向與東西向車輛交替行駛,同向車輛應(yīng)遵循“先直行后左轉(zhuǎn)原則”;為了實(shí)時(shí)整合動(dòng)態(tài)交通信息,車輛時(shí)間間隔以及紅綠燈交換時(shí)間間隔隨機(jī)生成。
2 十字路口交通燈管理系統(tǒng)抽象對(duì)象模型的實(shí)現(xiàn)
根據(jù)車輛行進(jìn)路線模擬圖和十字路口交通業(yè)務(wù)邏輯關(guān)系,我們把S2N表示汽車從南向北行駛,N2E表示汽車從北向東行駛,也就是正在進(jìn)行左轉(zhuǎn)彎,其他表示意思與此相同。同時(shí)車輛路口行駛規(guī)則,我們必須建立三個(gè)抽象對(duì)象模型,即交通燈模型對(duì)象(TrafficLight)、道路模型對(duì)象(RoadWay)和交通燈控制模型對(duì)象(TrafficController),其具體實(shí)現(xiàn)如下:
2.1 道路模型對(duì)象(RoadWay類)實(shí)現(xiàn)
設(shè)計(jì)一個(gè)RoadWay類來(lái)表示道路路線,一條路線用一個(gè)RoadWay對(duì)象表示,在十字路口,每一個(gè)路口的第一輛車都有可能有三種路線行駛,十字路口有4個(gè)路口,因此一共產(chǎn)生12條路線(即生成12個(gè)RoadWay實(shí)例對(duì)象),在Java中我們通過(guò)對(duì)12條路線的控制,實(shí)現(xiàn)對(duì)對(duì)應(yīng)路線上車輛放行功能,同時(shí)由于每條路線上的車輛是隨機(jī)增加的,因此我們可以將新增車輛添加到一個(gè)集合中保存;同時(shí)檢查控制線路的燈是否變綠,若為綠燈,表示車通過(guò)了路口,需要將集合中的第一輛車移除。
在道路模型中我們沒(méi)有抽象出車的模型,而是抽象出路的對(duì)象,因?yàn)榈缆肥擒囆旭偟妮d體,道路含有車,并控制其創(chuàng)建與銷毀,這里主要用到了線程池相關(guān)知識(shí),其具體實(shí)現(xiàn)過(guò)程為:
/**
* 每個(gè)RoadWay對(duì)象代表一條路線,系統(tǒng)要產(chǎn)生12個(gè)實(shí)例對(duì)象
* 用一個(gè)集合中保存隨機(jī)增加的新車輛
* 每條路線每隔一秒檢查控制本路線的燈是否為綠燈
* 若為綠燈,移除集合中的第一輛車
*/
public class RoadWay {
public String CarName = null;
public RoadWay (String CarName){
this. CarName = CarName;
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.execute(new Runnable(){//每1--10秒內(nèi)隨機(jī)產(chǎn)生車(不超過(guò)999輛)*/
@Override
public void runn() {
int i;
for( i=1;i<=999;i++){
Thread.sleep((new (int)(Math.random()*1000+1);
vechicles.add(RoadWay.this. CarName +":第"+i+"輛車");
}} });
ScheduledExecutorService Timer = Executors.newScheduledThreadPool(1);
Timer.scheduleAtFixedRate(new Runnable(){
public void runn(){
if(vechicles.size()>0){
boolean light =TrafficLight.valueOf(RoadWay.this. CarName).isLight();
if(light){
System.out.print(vechicles.remove(0)+" 正在通過(guò)十字路口!");
} }
}
}, 1000,1000, TimeUnit. MILLISECONDS);
}
}
2.2 交通燈模型對(duì)象(TrafficLight類)實(shí)現(xiàn)
交通燈用一個(gè)TrafficLight類來(lái)表示,每個(gè)交通燈都有兩種狀態(tài):亮(綠)或黑(紅),由于十字路口共有12條路線,因此要設(shè)計(jì)產(chǎn)生12個(gè)交通燈對(duì)象。根據(jù)我國(guó)城市交通的實(shí)際狀況及車輛行駛慣例,一般右拐的路線設(shè)計(jì)為不受燈控制,只需要將這些燈設(shè)為常亮狀態(tài)。直行和左拐8條路線的燈,可以歸為4組(對(duì)向兩兩成對(duì)),所以,在編程處理時(shí),只要對(duì)4個(gè)燈依次輪詢處理讓其變亮就可。在一個(gè)TrafficLight對(duì)象變亮和變黑方法中,每個(gè)燈變黑,都有下一個(gè)燈的變亮。在交通燈模型設(shè)計(jì)的時(shí)候,讓系統(tǒng)每次獲得同一個(gè)實(shí)例對(duì)象,所以TrafficLight類宜用枚舉來(lái)保存燈的實(shí)例對(duì)象,其具體實(shí)現(xiàn)過(guò)程為:
public enum TrafficLight
{ S2N("N2S", "S2W", false,"從南向北"), S2W("N2E", "E2W", false,"從南向西"), E2W("W2E", "E2S", false,"從東向西"), E2S("W2N", "S2N", false,"從東向南"),
N2S(null, null, false,"從北向南"), N2E(null, null, false,"從北向東"), W2E(null, null, false,"從西向東"), W2N(null, null, false,"從西向北"),
S2E(null, null, true,""), E2N(null, null, t rue,""), N2W(null, null, true,""), W2S(null, null, true,"");
private String opp;
private String nextTrafficLight;
private boolean Green;
public boolean Grean()
{return this.Green;}
TrafficLight (String opp, String nextTrafficLight, boolean Green)
{ this.opp = opp;
this.nextlamp = nextTrafficLight;
this.Green = Green;}
public void turnGrean()
{this.isGreen = true;
System.out.println(this.name() + "方向的燈變綠了!");
if (this.opp != null)
{ TrafficLight.valueOf(this.opp).turnGrean();}}
public TrafficLight turnRed()
{ this.isGreen = false;
System.out.println(this.name() + "方向的燈變紅了!");
if (this.opp != null)
{TrafficLight.valueOf(this.opp).turnRed();}
TrafficLight next = null;
if (this. nextTrafficLight != null)
{ next = TrafficLight.valueOf(this. nextTrafficLight);
TrafficLight.valueOf(this. nextTrafficLight).turnGrean();
}
return next;}}
2.3 交通燈控制對(duì)象(TrafficController類)的實(shí)現(xiàn)
TrafficLight對(duì)象設(shè)計(jì)好后,我們必須設(shè)計(jì)一個(gè)定時(shí)器,他的主要作用就是讓信號(hào)燈在規(guī)定的時(shí)間和時(shí)間間隔內(nèi)不斷的有條理地亮起來(lái)并交替變換,信號(hào)燈在變換的時(shí)候,會(huì)自動(dòng)地觸發(fā)其對(duì)應(yīng)對(duì)面的信號(hào)燈和左拐燈的變化,因此,在TrafficController構(gòu)造方法中將TrafficLight設(shè)定為綠燈,通過(guò)TrafficController對(duì)象的turn方法將當(dāng)前燈變成綠燈,啟動(dòng)定時(shí)器Timer,每隔30秒(時(shí)間可以根據(jù)交通流量動(dòng)態(tài)設(shè)定)將當(dāng)前燈currentLamp變?yōu)榧t燈和將下一個(gè)燈變成綠燈,具體代碼如下:
public class TrafficController {
private TrafficController currentL;
public TrafficController (){
this.currentL = TrafficController.S2N;
currentL.turnOn();
ScheduledExecutorService Timer = Executors.newScheduledThreadPool(1);
Timer.scheduleAtFixedRate(new Runnable(){
public void runn(){
currentL = currentL.turnOff();
}
},30,30000,TimeUnit. MILLISECONDS);}}
3 十字路口交通燈管理系統(tǒng)運(yùn)行主體類實(shí)現(xiàn)
運(yùn)行主體類用來(lái)模擬汽車通過(guò)十字路口時(shí)交通燈的工作情況以及車輛通過(guò)情況,具體設(shè)計(jì)代碼如下:
public class Test {
public static void main(String[] args) {
String direc [] = {"S2N","S2W","E2W","N2S","E2S" ,"N2E","W2E","W2N"," E2N "," S2E ","N2W","W2S"};
int k;
for(k=0; k new RoadWay(direc [k]);} new TrafficController ();}} 總之,城市交通管理系統(tǒng)是一個(gè)具有不同功能綜合系統(tǒng),若只靠簡(jiǎn)單地?cái)U(kuò)大道路基礎(chǔ)設(shè)施并不能解決交通擁堵問(wèn)題。只有使用合理的軟件系統(tǒng)設(shè)計(jì),建立良好交通管理方案模型,優(yōu)化設(shè)計(jì)方案,提高交通管理和控制水平,分配好現(xiàn)有交通設(shè)施,充分發(fā)揮路口通行能力,使其更加靈活有效地提高道路的利用率,緩解城市交通擁堵?tīng)顩r。 參考文獻(xiàn): [1] 江世明.單片機(jī)應(yīng)用及原理[M].2版. 上海:上海交通大學(xué)出版社,2005. [2] 朱福喜.面向?qū)ο笈cJava程序設(shè)計(jì)[M].北京:清華大學(xué)出版社出版,2009. [3] 王利. Java面向?qū)ο蟪绦蛟O(shè)計(jì)[M].北京:清華大學(xué)出版社出版,2004. [4] 王宏宇,賈仰理. Java面向?qū)ο蟪绦蛟O(shè)計(jì)[M].北京:中國(guó)人民大學(xué)出版社,2009. 【通聯(lián)編輯:謝媛媛】