談?wù)凧ava的動態(tài)代理

動態(tài)代理機制的設(shè)計的目的是解耦,在很多類中,一個函數(shù)需要重復寫,如果每個類中都有該函數(shù),造成代碼的耦合,單獨提出來之后,這個時候很多類可以直接調(diào)用,則這幾個類又和特定的方法耦合了,可以用動態(tài)代理解耦合;

jdk的動態(tài)代理只能為接口創(chuàng)建動態(tài)代理;

newProxyInstance方法,直接可以創(chuàng)建一個動態(tài)代理對象,該代理對象的實現(xiàn)類實現(xiàn)了interfaces指定的系列接口,執(zhí)行動態(tài)代理對象的每個方法時都會被替換執(zhí)行InvocationHandle對像的invoke方法


接口實現(xiàn)的方法

在該程序中,Dog是個接口,接口中有三個方法,傳統(tǒng)方法中,創(chuàng)建一個Dog對象時候需要new Dog()的形勢才能創(chuàng)建出來,現(xiàn)在通過動態(tài)代理機制,直接創(chuàng)建一個動態(tài)代理對象出來,通過

Dog dog = new GunDog();

Dog dog1 = (Dog) MyProxyFactory.getProxy(dog);

//執(zhí)行具體方法的時候都會去調(diào)用IncocationHandler中的invoke()方法,可以在invoke()方法中定義一些其他方法實現(xiàn)其他方法

dog1.info();//直接調(diào)用

dog1.run();//直接調(diào)用

dog1.bark("哈哈");

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容