文章詳情頁
java - 這種情況怎么設計class? 有什么設計模式嗎
瀏覽:184日期:2024-03-23 14:02:51
問題描述
一種通過硬件設備的數據用了特殊格式,前一段是id,后一段是數據,
前面一段,代表它是一段類型為A, B, C等等哪一種類型的數據。
根據前面的類型,我們取后面中的某幾位,如A類型我們需要數據取數據的1-3位,B類型則需要第20和第22位。
現在設計的時候只需要能接受a類和b類就行了,但是未來想要接受c類, d類等等,同時對數據進行的操作也不同,比如a類需要把1-3位都乘二,b類第二十位加1,第二十二位不變z
問題是應該怎么樣設計,未來拓展的時候方便呢?比如我想支持d類,不用重寫代碼....
問題解答
回答1:復雜的話用策略模式,不復雜的直接OO的繼承,不同類型的消息交給不同的子類去處理。
回答2:應該把數據協議格式規定好:例如:高3位代表類型,中間2位代表協議版本,后面代表數據。協議規定好后,通過模板方法來處理,將具體解析放到子類,通用的放到父類。這樣在擴展時,不需要改動原有代碼,只需要寫新的實現就可以。
回答3:根本用不到設計模式,傳統的繼承就可以,各個子類分別取不同的字段就可以。
回答4:如果一定要使用設計模式,可以考慮一哈策略模式
回答5:還需要判斷一下后續的使用者,工廠模式,策略模式,代理模式可能都能滿足你擴展的需求,其實重要的是想法,遵照六原則設計吧,沒必要非要套某一個模式,根據需求,代碼慢慢演變,最后可能自然的就符合某個模式了,也可能是多種模式的組合。
標簽:
java
相關文章:
1. html5 - 如何實現帶陰影的不規則容器?2. javascript - 循環嵌套多個promise應該如何實現?3. mysql優化 - 關于mysql分區4. css - 移動端字體設置問題5. objective-c - iOS開發支付寶和微信支付完成為什么跳轉到了之前開發的一個app?6. css3 - rem布局下,用戶瀏覽器的最小字號是12px怎么辦?7. vue.js - vue 打包后 nginx 服務端API請求跨域問題無法解決。8. 請教各位大佬,瀏覽器點 提交實例為什么沒有反應9. 前端 - IE9 css兼容問題10. javascript - ionic2 input autofocus 電腦成功,iOS手機鍵盤不彈出
排行榜
