标签:好的 body glib public soft href etc jdk idt
-------------------------------------------------------------------------------------------------------------------
1 //租房 2 public interface Rent { 3 void rent(); 4 }
1 //真实角色 房东 2 public class Host implements Rent { 3 public void rent() { 4 System.out.println("房东出租房子"); 5 } 6 }
1 //代理角色房屋中介 2 public class proxy implements Rent { 3 private Host host; 4 5 public proxy(){ 6 7 } 8 public proxy(Host host){ 9 this.host= host; 10 } 11 12 public void rent() { 13 host.rent(); 14 seeHouses(); 15 hetong(); 16 fare(); 17 } 18 public void seeHouses(){ 19 System.out.println("中介带你看房子"); 20 } 21 public void fare (){ 22 System.out.println("中介收中介费"); 23 24 } 25 public void hetong(){ 26 System.out.println("中介签署租房合同"); 27 } 28 }
//调用真实角色的方法的人 public class Client { public static void main(String[] args) { Host host = new Host(); proxy p = new proxy(host); //此时代理角色可以执行一些附属操作,这就是代理的意义所在 p.rent(); } }
/*输出 房东出租房子
中介带你看房子
中介签署租房合同
中介收中介费*/
1 package com.wzy.proxy.dynamicproxy; 2 //租房 3 public interface Rent { 4 void rent(); 5 }
1 package com.wzy.proxy.dynamicproxy; 2 3 //真是角色 房东 4 public class Host implements Rent { 5 public void rent() { 6 System.out.println("房东出租房子"); 7 } 8 }
1 //会用这个类自动生成代理类 2 public class ProxyInvocationHandler implements InvocationHandler { 3 //被代理接口 4 private Rent rent; 5 6 public void setRent(Rent rent) { 7 this.rent = rent; 8 } 9 10 //生成代理类 11 public Object getProxy(){ 12 return Proxy.newProxyInstance(this.getClass().getClassLoader(), rent.getClass().getInterfaces(), this); 13 } 14 15 //处理代理实例.并返回结果 16 //调用代理程序的执行方法 17 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 18 //动态代理本质,使用了反射的机制 19 seeHouse(); 20 Object result = method.invoke(rent, args); 21 fare(); 22 return result; 23 } 24 public void seeHouse(){ 25 System.out.println("中介带看房子"); 26 } 27 public void fare(){ 28 System.out.println("中介收中介费"); 29 } 30 31 }
1 public class Client { 2 3 public static void main(String[] args) { 4 //真实角色 5 Host host = new Host(); 6 7 //代理角色:现在没有 8 ProxyInvocationHandler pih = new ProxyInvocationHandler(); 9 10 // 通过调用程序处理角色来处理我们要调用的接口实现对象 ! 11 pih.setRent(host);//设置要代理对象 12 13 Rent proxy = (Rent) pih.getProxy();//这里的proxy就是动态生成的代理对象 14 15 proxy.rent(); 16 17 } 18 }
输出:
中介带看房子
房东出租房子
中介收中介费
标签:好的 body glib public soft href etc jdk idt
原文地址:https://www.cnblogs.com/yzccc/p/12150065.html