反射機制

本文內容如有錯誤、不足之處,歡迎技術愛好者們一同探討,在本文下面討論區留言,感謝。

作用

  • 允許從類名字符串創建對象
    • JDBC驅動中的Class.forName(驅動類型名)就是一個最常見的例子
  • 允許選擇對象的構造函數創建對象
  • 允許通過方法的字符串名稱以及參數類型調用方法
  • 允許通過屬性的字符串名稱存取屬性的值

反射機制的使用

  • 通過對前一階段多種不同的語句類型的解碼,可以發現一定規律:
    • 對於簡單語句(parametric sentences),都是將語句分段之後,按照每段的不同類型進行解析,解析之後,保存屬性值
    • 對於封裝語句(encapsulation sentences)
      • 將語句分段,提取各個段的內容
      • 等待多語句組完成或超時未完成時,將有效載荷部分解碼爲比特數組
      • 將比特數組按照每個屬性需要的比特位數以及不同的數據類型將比特數組編碼爲需要的類型
      • 設置屬性的值
  • 編碼部分的工作同樣存在類似的規律
  • 一些額外需要考慮的問題
    • 屬性必須保證順序
    • 有些屬性是必須有的,如果語句中不存在,需要終止解碼
    • 有些語句中,有多組信息,例如GSV:http://www.gpsinformation.org/dale/nmea.htm#GSV

Annotation

  • Java支持對類(接口)、方法、屬性加上annotation
  • 每個annotation可以定義自己的屬性,例如序列號、屬性是否必須存在等等
  • 因此可以通過annotation,將數據對象的屬性進行標註
  • 在解碼時,獲取需要的屬性,根據不同的屬性類型進行解碼,通過反射設置屬性值

Chain of Responsibility模式

  • 責任鏈模式由一系列的command對象組成,在進行處理時,按照command對象的順序逐步處理
  • 可根據command對象的執行情況決定終止執行或繼續執行
  • Command模式決定了當執行一個command的時候,只能夠完成一個小任務,但是當需要完成一系列任務時,需要使用責任鏈模式
  • 典型的責任鏈模式
    • Java Servlet的Filter,包括前處理Filter和後處理Filter,可以根據Filter的返回結果決定是否繼續執行,例如通過添加權限處理的Filter,過濾對權限外的頁面或操作的請求
    • MFC的消息處理模式,每個窗體對傳來的消息進行處理,消息處理結束後,可根據處理結果繼續處理或終止
    • Netty的channel處理,使用了類似於servlet filter的方式,只是更加巧妙

Singleton模式

  • 單例模式是在程序需要且僅需要創建一個對象時使用,單例模式決定了該類只能被實例化出一個對象,不能同時創建多個對象
  • 單例模式在Java中通常使用IoC框架來實現,例如Spring IoC中通過設置scope=singleon實現,而不通過代碼實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章