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