java - 這種情況怎么設(shè)計(jì)class? 有什么設(shè)計(jì)模式嗎
問(wèn)題描述
一種通過(guò)硬件設(shè)備的數(shù)據(jù)用了特殊格式,前一段是id,后一段是數(shù)據(jù),
前面一段,代表它是一段類(lèi)型為A, B, C等等哪一種類(lèi)型的數(shù)據(jù)。
根據(jù)前面的類(lèi)型,我們?nèi)『竺嬷械哪硯孜唬鏏類(lèi)型我們需要數(shù)據(jù)取數(shù)據(jù)的1-3位,B類(lèi)型則需要第20和第22位。
現(xiàn)在設(shè)計(jì)的時(shí)候只需要能接受a類(lèi)和b類(lèi)就行了,但是未來(lái)想要接受c類(lèi), d類(lèi)等等,同時(shí)對(duì)數(shù)據(jù)進(jìn)行的操作也不同,比如a類(lèi)需要把1-3位都乘二,b類(lèi)第二十位加1,第二十二位不變z
問(wèn)題是應(yīng)該怎么樣設(shè)計(jì),未來(lái)拓展的時(shí)候方便呢?比如我想支持d類(lèi),不用重寫(xiě)代碼....
問(wèn)題解答
回答1:復(fù)雜的話(huà)用策略模式,不復(fù)雜的直接OO的繼承,不同類(lèi)型的消息交給不同的子類(lèi)去處理。
回答2:應(yīng)該把數(shù)據(jù)協(xié)議格式規(guī)定好:例如:高3位代表類(lèi)型,中間2位代表協(xié)議版本,后面代表數(shù)據(jù)。協(xié)議規(guī)定好后,通過(guò)模板方法來(lái)處理,將具體解析放到子類(lèi),通用的放到父類(lèi)。這樣在擴(kuò)展時(shí),不需要改動(dòng)原有代碼,只需要寫(xiě)新的實(shí)現(xiàn)就可以。
回答3:根本用不到設(shè)計(jì)模式,傳統(tǒng)的繼承就可以,各個(gè)子類(lèi)分別取不同的字段就可以。
回答4:如果一定要使用設(shè)計(jì)模式,可以考慮一哈策略模式
回答5:還需要判斷一下后續(xù)的使用者,工廠模式,策略模式,代理模式可能都能滿(mǎn)足你擴(kuò)展的需求,其實(shí)重要的是想法,遵照六原則設(shè)計(jì)吧,沒(méi)必要非要套某一個(gè)模式,根據(jù)需求,代碼慢慢演變,最后可能自然的就符合某個(gè)模式了,也可能是多種模式的組合。
相關(guān)文章:
1. javascript - immutable配合react提升性能?2. javascript - sublime快鍵鍵問(wèn)題3. css - 寫(xiě)頁(yè)面遇到個(gè)布局問(wèn)題,求大佬們幫解答,在線等,急!~4. 配置Apache時(shí),添加對(duì)PHP的支持時(shí)語(yǔ)法錯(cuò)誤5. phpstudy8.1支持win11系統(tǒng)嗎?6. javascript - nodejs關(guān)于進(jìn)程間發(fā)送句柄的一點(diǎn)疑問(wèn)7. javascript - 移動(dòng)端上不能實(shí)現(xiàn)拖拽布局嗎?8. 實(shí)現(xiàn)bing搜索工具urlAPI提交9. Apache 已經(jīng)把網(wǎng)站根目錄的改為allow from all了,但是服務(wù)器還是不能訪問(wèn)?10. vue.js - Vue 如何像Angular.js watch 一樣監(jiān)聽(tīng)數(shù)據(jù)變化

網(wǎng)公網(wǎng)安備