其他分享
首页 > 其他分享> > 代理模式

代理模式

作者:互联网

1、代理模式

代理模式:为其他对象提供一种代理以控制这个对象的访问。

分析:

image-20211121184813867

1.1 静态代理模式

静态代理是由程序或特定工具自动生成的源代码,在程序运行时,.class文件就已经存在了。

静态代理的好处:

真实角色类:

public interface Renti { 
    void rent();
}
public class Rent implements Renti{
    public void rent() {
        System.out.println("buy house!----真实对象");
    }
}

代理角色类:

public class RentProxy implements Renti{
    private Rent rent;

    public RentProxy(Rent rent) {
        this.rent = rent;
    }

    public void rent() {
        System.out.println("fiex!-----代理对象");
        rent.rent();
    }
}

测试类(客户):

//静态代理模式:
@Test
public static void main(String[] args) {
    Rent rent = new Rent();
    RentProxy rentproxy = new RentProxy(rent);
    rentproxy.rent();
}

1.2 动态代理模式

动态代理指在运行时自动生成的代理类。

动态代理的好处:

动态代理需要实现InvocationHandler接口的invoke方法:

实体类:

public interface Rent {
    void rent();
}
public class RentRel implements Rent{
    public void rent() {
        System.out.println("buy house!---真实主体!");
    }
}

代理类:

public class Proxydy implements InvocationHandler {
    //被代理的接口。
    private Object object = null;

    //生成得到的代理类。
    public Object newReal(Object real){
        this.object = real;
        Class<?> realClass = real.getClass();
        Object proxyInstance = 				Proxy.newProxyInstance(realClass.getClassLoader(),realClass.getInterfaces(),this);	
        return proxyInstance;
    }

    //处理代理实例,并返回结果。
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("进入代理!!!!");
        //本质:使用反射机制实现动态代理。
        Object invoke = method.invoke(object, args);
        return invoke;
    }
}

测设类:

//动态代理模式:
public static void main(String[] args) {
    Rent real = (Rent) new Proxydy().newReal(new RentRel());
    real.rent();
}

标签:角色,Object,代理,模式,Rent,public,rent
来源: https://www.cnblogs.com/vxzx/p/15585425.html