程序为什么需要代理以及代理长什么样

如何为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() {@Overridepublic 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();}
}
