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