代理模式的好处
缺点
静态代理
接口
//租房接口
public interface Rent {
public void rent();
}
真实角色
//房东
public class House implements Rent{
public void rent() {
System.out.println("房东出租房子...");
}
}
代理角色
//中介
public class Client implements Rent{
private House house;
public Client(House house) {
this.house = house;
}
public void rent() {
seeHouse();
house.rent();
contract();
}
public void seeHouse(){
System.out.println("中介带看房啊...");
}
public void contract(){
System.out.println("中介签合同...");
}
}
客户
//客户
public class Proxy {
public static void main(String[] args) {
Client client = new Client(new House());
client.rent();
}
}
纵向开发 横切进去
动态代理
动态代理和静态代理角色一样
动态代理使动态生成的,不是我们直接写的
动态代理分为两大类:基于接口的动态代理,基于类的动态代理
需要了解2个类
proxy 代理 invocationHandler 调用处理程序
解决了静态代理的问题
public class HouseInvocationHandler implements InvocationHandler {
private Object target;
public void setTarget(Object target) {
this.target = target;
}
public Object getProxy(){
return Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(), this);
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
method.invoke(target, args);
System.out.println(method.getName());
return null;
}
}
原文:https://www.cnblogs.com/immortal-mode/p/14318549.html