1 //假如经理车子很多,但懒,自己不想卖车,这件事可以 交给代理去做 2 //卖车接口 3 4 public interface sellCar { 5 void sellcar(); 6 }
1 //经理 去实现这个接口 2 public class Manage implements sellCar { 3 @Override 4 public void sellcar() { 5 System.out.println("卖车"); 6 } 7 }
1 //上面的事情做完,这时就需要代理来做了 2 public class ProxyInvocationHandler implements InvocationHandler { 3 //被代理的接口 4 private sellCar sellcar; 5 public void setSellcar(sellCar sellcar) { 6 this.sellcar = sellcar; 7 } 8 //生成得到代理类 9 public Object getProxy(){ 10 //newProxyInstance 官方解释:返回一个指定接口的代理类的实例方法调用分派到指定的调用处理程序 11 return Proxy.newProxyInstance( 12 this.getClass().get睿共享 ClassLoader(), 13 //代理接口 14 sellcar.getClass().getInterfaces(), 15 this); 16 } 17 //处理代理实例,并返回结果 18 @Override 19 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 20 //动态代理的本质,就是使用反射机制实现睿共享 21 Object result= method.invoke(sellcar, args); 22 23 return result; 24 } 25 public void seeCar(){ 26 System.out.println("看车"); 27 } 28 }
1 -- 测试 2 3 public class Client { 4 public static void main(String[] args) { 5 //真实角色 6 Manage manage = ne睿共享 w Manage(); 7 //代理角色 8 ProxyInvocationHandl睿共享 er pih = new ProxyInvocationHandler(); 9 // 我们的所有东西真实角色和代理角色,是不是都会实现一个公同接口 10 //我们现在是不是真实睿共享 角色实现了这个接口没有问题对不对? 11 //嗯,代理角色是不是没实现?下面要写的内容就是通过这个代理角色的处理程序去实现 12 //代理真实角色 13 pih.setSellcar(manage); 14 //调用代理类的getProxy 15 sellCar proxy = (sellCar) pih.getProxy();//这里的proxy就是动态生成的 16 proxy.sellcar(); 17 } 18 }