首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

抽象應用實戰:Tbin/TbinList 封裝分類邏輯與 RTTI 區域化原則

     編輯:Java 相關知識

設計演進:從暴露分類到封裝區域化

分類邏輯暴露不雅且過度揭露。規則:「如果必須做不雅的事,至少將其本地化到一個類裡」。引入 TrashSorter 封裝分類。初想 TrashSorter extends Vector 含 sort(Trash t),但靜態編碼如何應對新類型加入?解決:從 sort() 移除類型資訊,只調用通用動態綁定方法處理類型細節。結構變為:TrashSorter 遍歷序列對每個 Vector 調用動態綁定 grab(Trash),Vector 須知曉自己容納類型。

狀態變化用數據、行為變化用多型

OOP 設計準則:「為狀態變化使用數據成員,為行為變化使用多型」。容納 Paper 的 Vector 與容納 Glass 的 Vector,grab() 行為差異完全取決於類型而非其他。可解釋為不同狀態。Java 有 Class 表示類型,用它判斷特定 Tbin 要容納什麼 Trash 類型。Tbin 建構子傳入選擇的 Class,grab() 用 Class BinType 與 RTTI 檢查傳入 Trash 物件是否匹配。

完整解決方案:RecycleB.java

Tbin:繼承 Vector,含 Class binType,grab(Trash t) 比較 t.getClass().equals(binType) 匹配則加入返回 true。
TbinList:繼承 Vector 容納 Tbin 引用。sort(Trash t) 遍歷尋找匹配 Bin。sortBin(Tbin bin) 遍歷 Bin 內元素分類到特定 Bin(通用代碼,新類型加入無需修改)。
主程式:建立主筒 bin、ParseTrash.fillBin() 填充、建立 TbinList 加入四類 Tbin(Aluminum/Paper/Glass/Cardboard)、sortBin() 分類、遍歷各 Bin 執行 Trash.sumValue() 及主筒總計。新增類型只需添加一行 addElement(new Tbin(NewClass.class))。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved