程序為什么需要代理以及代理長什么樣
如何為java對象創建一個代理對象
代碼:
BigStar類
package com. itheima. day11_Proxy ; public class BigStar implements Star { private String name; public BigStar ( String name) { this . name = name; } public String sing ( String name) { System . out. println ( this . name+ "正在唱:" + name) ; return "謝謝~~謝謝~~" ; } public void dance ( ) { System . out. println ( this . name+ "正在優美的跳舞~~" ) ; } }
Star接口
package com. itheima. day11_Proxy ; public interface Star { String sing ( String name) ; void dance ( ) ;
}
ProxyUtil類(代理工具類)
package com. itheima. day11_Proxy ; import java. lang. reflect. InvocationHandler ;
import java. lang. reflect. Method ;
import java. lang. reflect. Proxy ; public class ProxyUtil { public static Star createProxy ( BigStar bigStar) { Star starProxy = ( Star ) Proxy . newProxyInstance ( ProxyUtil . class . getClassLoader ( ) , new Class [ ] { Star . class } , new InvocationHandler ( ) { @Override public Object invoke ( Object proxy, Method method, Object [ ] args) throws Throwable { if ( method. getName ( ) . equals ( "sing" ) ) { System . out. println ( "準備話筒,收費20萬" ) ; } else if ( method. getName ( ) . equals ( "dance" ) ) { System . out. println ( "準備場地,收費1000萬" ) ; } return method. invoke ( bigStar, args) ; } } ) ; return starProxy; }
}
Test類(主程序)
package com. itheima. day11_Proxy ; public class Test { public static void main ( String [ ] args) { BigStar s = new BigStar ( "楊超越" ) ; Star starProxy = ProxyUtil . createProxy ( s) ; String rs = starProxy. sing ( "好日子" ) ; System . out. println ( rs) ; starProxy. dance ( ) ; }
}