動態(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("哈哈");