标签:obj String 静态 void 代理 Override JAVA public
动态代理
interface People{ void dance(); String eat(String food); void run(); } //创建被代理类 class ManPeople implements People{ @Override public void dance() { System.out.println("男人调街舞"); } @Override public String eat(String food) { return "男人吃:"+food; } @Override public void run() { System.out.println("男人跑5000米"); } } class WomanPeople implements People{ @Override public void dance() { System.out.println("女人调中国舞"); } @Override public String eat(String food) { return "女人吃:"+food; } @Override public void run() { System.out.println("女人跑100米"); } } //代理工厂 class ProxyFactory{ //生产代理类对象 public static Object getProxyInstance(Object obj){ //obj被代理类对象 MyInvocationHandler handler = new MyInvocationHandler(); handler.bind(obj); return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(),handler); } } class MyInvocationHandler implements InvocationHandler{ private Object obj; public void bind(Object obj){ this.obj = obj; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //代理类对象调用的方法- obj指向被代理类对象 , 所以这里调用的是被代理类方法 Object returnValue = method.invoke(obj,args); return returnValue; } } public class ProxyTest { public static void main(String[] args) { //先创建代理类对象 ManPeople manPeople = new ManPeople(); People proxyInstance = (People) ProxyFactory.getProxyInstance(manPeople); proxyInstance.dance(); proxyInstance.run(); WomanPeople womanPeople = new WomanPeople(); People proxyInstancew = (People) ProxyFactory.getProxyInstance(womanPeople); proxyInstancew.dance(); proxyInstancew.run(); } }
静态代理
interface ClothFactory{ void productCloth(); } //代理类 class ClothFactoryProxy implements ClothFactory{ private ClothFactory factory; public ClothFactoryProxy(ClothFactory factory){ this.factory = factory; } @Override public void productCloth() { factory.productCloth(); } } //被代理类 class NickClothFactory implements ClothFactory{ @Override public void productCloth() { System.out.println("被代理类执行了"); } } public class ProxyStatic { public static void main(String[] args) { NickClothFactory nickClothFactory = new NickClothFactory(); ClothFactoryProxy clothFactoryProxy = new ClothFactoryProxy(nickClothFactory); clothFactoryProxy.productCloth(); } }
标签:obj,String,静态,void,代理,Override,JAVA,public 来源: https://www.cnblogs.com/finnlee/p/16366526.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。