java设计模——反射的应用 (利用反射来去除if判断语句)
利用反射來去除if判斷語句
?
我的以前寫的一個查分系統,就是部長讓我寫的那個,使用一個分發器(函數),他會根據傳遞進來的字符串參數調用不同的方。?If(“add”.equalsIgnoreCase(funcName))?{?return?add();}?,每增加一個方法,就需要增加一個if分支,這樣需要不斷的修改原來的代碼,需要重新編譯,容易出錯,面向對象的原則是“對修改關閉,對擴展開放”,因此我試著用另外一種方法來實現,利用“反射”。我們實現原理是:傳入的類名稱字符串,根據類名直接實例化該對象,調用內部方法。
? 1、因為每個函數都是用來執行一定的業務邏輯的(操作數據庫),因此先定義一個接口,然后定義一個service函數,這個接口的主要功能就是能實現業務函數名稱統一化,規范化,(我只要調同一個函數就可以,但類的不同函數內部實現是不一樣化),實例化對象時變量的引用使用該類型(多態),如果不這樣,那需要頻繁的修改代碼,類型不同嗎,你懂得。
1、每個相應的業務功能分別定義為一個類,并繼實現接口,并實現service函數,例如?增加人員信息為一個類,刪除人員信息為一個類,根據不同的類,函數的實現也不同,具體實現不在敘述。
2、這樣就可以將上邊的if語句去掉,利用java反射機制,只要傳入相關業務類的類名?字符串?,利用反射實例化該類,并調用service方法,就可以實現相關的業務邏輯。
使用上邊方法,如果要增加新的業務,例如:修改人員信息,只要定義新的業務類,并實現上述接口,實現servcie方法,只要傳入該類的類名,就可自動調用service方法實現業務邏輯,根本就不需要修改原來(用反射代替if判斷)的代碼了。就算刪除該業務類,也比較方邊,不使用該類即可,想反,if判斷?就需要修改代碼,刪除相關的業務分支。
如果類名比較長,傳入字符串不方便,可定義一個配置文件,key=value的形式,key是類名的別名,value是類的全路徑名,只要傳入該key值,然后利用程序去查找配置文件,找出對應的value,便可找到該類名,并利用反射實例化。
具體的反射使用方法,可參考本空間的另一篇文章,java反射。
轉載于:https://www.cnblogs.com/13188196we/p/3164929.html
總結
以上是生活随笔為你收集整理的java设计模——反射的应用 (利用反射来去除if判断语句)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 横瓜执导众程序员开展大讨论关于C、JAV
- 下一篇: 长期睡眠感缺失,头晕,检查还没有问题,可