代理模式(Proxy Model)(4)

1 package com.cnblogs.vincentzh.dynamicproxy; 2 //创建客户类 3 import java.lang.reflect.Proxy; 4 5 public class Client 6 { 7 /** 8 * @param args 9 */ 10 public static void main(String[] args) 11 { 12 HouseHolder houseHolder = new HouseHolder(); 13 DynamicProxy handler = new DynamicProxy(houseHolder); // 生成 HouseHolder 的代理 14 15 // 动态生成代理实例(HouseHold代理实例),代理支持的接口由初始化参数(第二个)指定,代理实例处理操作所调用的 handler 由第三个参数指定 16 Rent rent = (Rent)Proxy.newProxyInstance(HouseHolder.class.getClassLoader(), HouseHolder.class.getInterfaces(), handler); 17 rent.rent(); // 执行客户需要进行的行为操作,动态生成的代理实例直接调用指定 handler 的 invoke 方法 18 19 System.out.println("----------------------------------"); 20 21 BusinessMan businessMan = new BusinessMan(); 22 handler.setRealSubject(businessMan); // 为代理更换引用的真实对象(即原本被代理的 HouseHolder 被更换为了 BusinessMan) 23 // 动态生成代理实例(BusinessMan代理实例) 24 // 注:代理实例实在代码执行过程中动态执行的 25 Sale sale = (Sale)Proxy.newProxyInstance(BusinessMan.class.getClassLoader(), BusinessMan.class.getInterfaces(), handler); 26 sale.sale(); 27 } 28

  执行结果:

6、总结

  代理模式解决了不能直接操作真实对象的问题,其中的动态代理更是使代理模式的使用简化不少。若使用静态代理,那么当有不用的真实对象(分别实现了不同的操作接口),我们只能去为被代理的真实对象重新生成一个代理类,而动态代理就解决了这一问题,用一个代理类,解决了所有真实对象的代理。通俗点将,这是个全能的代理,既能干租房中介的活,还能干买菜中介的活,也能干媒人的活,听起来貌似很牛逼的样子。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/071ee9bf087ba3e8a75907b2517d832b.html