学习笔记-java编程-交通灯管理器设计流程。
先拋出需求:
- 異步隨機生成按照各個路線行駛的車輛。
例如:
?????? 由南向而來去往北向的車輛 ---- 直行車輛
?????? 由西向而來去往南向的車輛 ---- 右轉(zhuǎn)車輛
?????? 由東向而來去往南向的車輛 ---- 左轉(zhuǎn)車輛
?????? 。。。
?
- 信號燈忽略黃燈,只考慮紅燈和綠燈。
?
- 應(yīng)考慮左轉(zhuǎn)車輛控制信號燈,右轉(zhuǎn)車輛不受信號燈控制。
?
- 具體信號燈控制邏輯與現(xiàn)實生活中普通交通燈控制邏輯相同,不考慮特殊情況下的控制邏輯。
注:南北向車輛與東西向車輛交替放行,同方向等待車輛應(yīng)先放行直行車輛而后放行左轉(zhuǎn)車輛。
?
- 每輛車通過路口時間為1秒(提示:可通過線程Sleep的方式模擬)。
?
- 隨機生成車輛時間間隔以及紅綠燈交換時間間隔自定,可以設(shè)置。
?
- 不要求實現(xiàn)GUI,只考慮系統(tǒng)邏輯實現(xiàn),可通過Log方式展現(xiàn)程序運行結(jié)果。
?
這里使用面對對象的思想對問題進行解析
首先對路口車輛路線進行建模,發(fā)現(xiàn)有12條路線
其中可以分為三組:
?由南向而來去往北向的車輛和其相對方向 ---- 直行車輛
?????? 由西向而來去往南向的車輛和其相對方向 ---- 右轉(zhuǎn)車輛
?????? 由東向而來去往南向的車輛和其相對方向 ---- 左轉(zhuǎn)車輛
其中,右轉(zhuǎn)車輛又是不受紅綠燈控制的,可以理解為所有右轉(zhuǎn)車輛路線綠燈為常亮狀態(tài)。
而紅綠燈中綠燈(亮) ?紅燈(不亮)可以利用燈亮不亮這樣來表示。
?
現(xiàn)在設(shè)計路線的模型Road,
總共12條路線,所以要實現(xiàn)12個類?;A(chǔ)模型為,設(shè)計一條線程,隨機的時間內(nèi)增加一輛車到集合中,
再設(shè)計一條線程每隔一秒種檢查一次紅綠燈,若為綠燈(亮),則從路線車輛集合中刪除第一個元素,視為該車通過路口。
路線的模型設(shè)計完畢。
?
設(shè)計交通燈模型Lamp。
這里交通燈是對應(yīng)于每一條路線的,所以要設(shè)計12個來對應(yīng)路線。但是路線是固定的,所以交通燈可以設(shè)計為枚舉類型。
總共有12個元素。
每隔交通燈實例對象里要有 燈亮的標志位:lighted
獲取標志位的方法:islighted()
控制燈亮的方法:light()
控制燈滅的方法:breakOut()
這里我們可以根據(jù)上面分析的三組情況,把交通燈分為三組
我們只要控制四個方向的交通燈就可以了,其中右轉(zhuǎn)的燈是常亮的,所以可以設(shè)置light為true
由南向北,由南向西,由東向西,由東向南,只要控制這四個方向的燈,就可以控制對應(yīng)相對方向的燈,因為相對方向的燈都是相同狀態(tài)的。
所以這里就可以設(shè)置一個三個構(gòu)造參數(shù)的燈,
分別是相反方向的燈:String opposite
?燈滅后下一個亮的燈:String next
和該燈原本的狀態(tài):boolean lighted
到這里Lamp模型設(shè)計完畢。
?
現(xiàn)在,路線模型、交通燈模型設(shè)計完畢了,還需要一個交通燈控制器來控制燈的變化,從而實現(xiàn)交通的運行。
根據(jù)現(xiàn)實情況,只有一條路線和其相對的路線可以同一時間運行車輛。
所以這里控制系統(tǒng)需要先控制其中一條方向燈為亮(對應(yīng)方向的燈也會被打開)
使用定時系統(tǒng),例如每隔10秒鐘切換一次路線
設(shè)一個當前行駛路線的燈,置為亮。
每次燈滅的時候就把下一個變亮的燈設(shè)置為當前路線行駛燈。
到這里,控制器就設(shè)置完畢了。
轉(zhuǎn)載于:https://www.cnblogs.com/ecoz/p/3776529.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的学习笔记-java编程-交通灯管理器设计流程。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络爬虫(一)——爬虫及其实现
- 下一篇: 爬虫之异步爬虫asyncio