接口
public interface Rent {
public void rent ( ) ;
}
接口实现类
public class Host implements Rent {
public void rent ( ) {
System . out. println ( "房东要出租房子!" ) ;
}
}
动态代理实现类
public class ProxyInvocationHandler implements InvocationHandler {
private Rent rent;
public void setRent ( Rent rent) {
this . rent = rent;
}
public Object getProxy ( ) {
return Proxy . newProxyInstance ( this . getClass ( ) . getClassLoader ( ) , rent. getClass ( ) . getInterfaces ( ) , this ) ;
}
public Object invoke ( Object proxy, Method method, Object [ ] args) throws Throwable {
seeHouse ( ) ;
Object result = method. invoke ( rent, args) ;
fare ( ) ;
return result;
}
public void seeHouse ( ) {
System . out. println ( "中介带看房子" ) ;
}
public void fare ( ) {
System . out. println ( "收中介费" ) ;
}
}
测试
public class Client {
public static void main ( String [ ] args) {
Host host = new Host ( ) ;
ProxyInvocationHandler pih = new ProxyInvocationHandler ( ) ;
pih. setRent ( host) ;
Rent proxy = ( Rent ) pih. getProxy ( ) ;
proxy. rent ( ) ;
}
}
图片理解
实现方法
接口 接口实例 代理类 - 被代理的接口 - 利用set方法接收被代理的接口实例 - 生成得到代理类 - 处理代理对象,并返回结果 测试类 - 创建一个实例 - 利用set方法传入到代理类(为准备生成代理对象做准备) - 得到代理实例,生成得到代理类 - 处理代理实例,返回结果