程序为什么需要代理以及代理长什么样
如何为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 ( ) ; }
}