第二十八章 代理模式(Proxy)

2019-05-28  本文已影响0人  JarvisTH

属于结构模式,给一个对象提供一个代理对象,并由代理对象控制原对象的引用。代理对象在客户端和目标对象间起到中介作用。

适用场景:

缺点:

扩展:

spring代理选择:

代理速度对比:

相关设计模式:

源码:
jdk——reflect下的proxy类等
spring——ProxyFactoryBean,
cglibAopProxy,JdkDynamicAopProxy等
mybatis——MapperProxyFactory等

一、代理的种类

按目的划分:

二、代理模式结构

角色:

abstract public class Subject{
    abstract public void request();
}
public class RealSubject extends Subject{
    public RealSubject(){}

    public void request(){
        System.out.println("From real subject");
    }
}
public class ProxySubject extends Subject{
    private RealSubject realSubject;

    public ProxySubject(){}

    public void request(){
        preRequest();
        if(realSubject==null){
            realSubject=new RealSubject();
        }
        realSubject.request();
        postRequest();
    }

    private void preRequest(){
    ....
    }

    private void postRequest(){
    ...
    }
}
Subject subject=new ProxySubject();
subject.requeat();

三、Java对代理模式支持

1.反射与动态代理

java.lang.reflect:Proxy , InvocationHandler 和 Method。

四、代理模式优缺点

1.远程代理

可以将网络的细节隐藏,使得客户端不必考虑网络存在。


缺点是客户端可能不知道启动的是一个耗时的远程调用。

2.虚拟代理

优点是代理对象可以在必要时将被代理的对象加载,可以对加载过程优化。

3.保护代理

优点是可以在运行时间对用户的有关权限进行检查,然后在核实后决定将调用传递给被代理的对象。

4.智能引用代理

在访问一个对象时可以执行一些内务处理操作,比如计数。

五、代理模式实现

代理模式可能并不知道真正被代理的对象,而仅仅持有一个被代理对象的接口。这时代理对象不能创建被代理对象,被代理对象必须由系统其他角色创建并传入。

上一篇 下一篇

猜你喜欢

热点阅读