java設計模——反射的應用 (利用反射來去除if判斷語句)

利用反射來去除if判斷語句java

 

個人之前寫的一個查分系統,就是部長讓我寫的那個,使用一個分發器(函數),他會根據傳遞進來的字符串參數調用不一樣的方。 Ifadd.equalsIgnoreCase(funcName)) { return add();} ,每增長一個方法,就須要增長一個if分支,這樣須要不斷的修改原來的代碼,須要從新編譯,容易出錯,面向對象的原則是「對修改關閉,對擴展開放」,所以我試着用另一種方法來實現,利用「反射」。咱們實現原理是:傳入的類名稱字符串,根據類名直接實例化該對象,調用內部方法。數據庫

  1、由於每一個函數都是用來執行必定的業務邏輯的(操做數據庫),所以先定義一個接口,而後定義一個service函數,這個接口的主要功能就是能實現業務函數名稱統一化,規範化,(我只要調同一個函數就能夠,但類的不一樣函數內部實現是不同化),實例化對象時變量的引用使用該類型(多態),若是不這樣,那須要頻繁的修改代碼,類型不一樣嗎,你懂得。app

一、每一個相應的業務功能分別定義爲一個類,並繼實現接口,並實現service函數,例如 增長人員信息爲一個類,刪除人員信息爲一個類,根據不一樣的類,函數的實現也不一樣,具體實現不在敘述。函數

二、這樣就能夠將上邊的if語句去掉,利用java反射機制,只要傳入相關業務類的類名 字符串 ,利用反射實例化該類,並調用service方法,就能夠實現相關的業務邏輯。spa

使用上邊方法,若是要增長新的業務,例如:修改人員信息,只要定義新的業務類,並實現上述接口,實現servcie方法,只要傳入該類的類名,就可自動調用service方法實現業務邏輯,根本就不須要修改原來(用反射代替if判斷)的代碼了。就算刪除該業務類,也比較方邊,不使用該類便可,想反,if判斷 就須要修改代碼,刪除相關的業務分支。orm

若是類名比較長,傳入字符串不方便,可定義一個配置文件,key=value的形式,key是類名的別名,value是類的全路徑名,只要傳入該key值,而後利用程序去查找配置文件,找出對應的value,即可找到該類名,並利用反射實例化。xml

具體的反射使用方法,可參考本空間的另外一篇文章,java反射。對象

相關文章
相關標籤/搜索