动态代理
Rent
public interface Rent {
public void rent();
}
Host
public class Host implements Rent{
@Override
public void rent() {
System.out.println("房东要出租房子.....");
}
}
ProxyInvocationHandler
作用:用于得到代理角色
public class ProxyInvocationHandler implements InvocationHandler {
//处理代理实例,并返回结果
// Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
// new Class<?>[] { Foo.class },
// handler);
//被代理的接口
private Rent rent;
public void setRent(Rent rent) {
this.rent = rent;
}
//生成得到代理类
public Object getProxy() {
Object o = Proxy.newProxyInstance(this.getClass().getClassLoader(),
rent.getClass().getInterfaces(), this);
return o;
}
@Override
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("收中介费..........");
}
}
Client
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(); //执行房东的method
}
}