代理模式的详解(一)---SpringAOP的两种实现代理模式的详细解读

   现在在生活中,许多软件系统都提供跨网络和系统的应用,但在跨网络和系统应用时,作为系统开发者并不希望客户直接访问系统中的对象。其中原因很多考虑到系统安全和性能因素,因素还有很多,也就不再进行一一的列举了,所以,想到了在客户端和系统端添加一层中间层----代理层,也是即将要介绍的代理模式。

  首先,明确什么是代理模式,代理模式(Proxy)为另一个对象提供一个替身或占位符以控制对这个对象的访问,其实用最简单的方式来解释代理模式,那就是中介,客户不想直接引用对象,这个“中介”也就是代理对象就起到了一定的作用。

  其次,就是代理模式的作用,就是在客户端和目标对象之间起到一个中介的作用。

  来张图就比较清晰了代理模式的结构图

  

其中,代理模式会涉及到一些角色,

  抽象角色,声明真实的对象和代理对象的共同的接口。

  代理角色:代理对象内部含有真实对象的引用,也就是说,代理对象可以操作真实的对象,于此同时,代理对象会提供和真实对象相同的接口,以便再任何时刻都能代替真实对象,同时,代理对象可以在执行真实对象操作的时候,附加上其它的操作,也就是对真实对象的一个简单的封装。

  真实角色:代理角色所要代表的角色,也就是我们最终想要引用的对象。

//抽象角色
public abstract class Subject {
    abstract public void request();
}
//真实角色
public class RealSubject extends Subject {

    @Override
    public void request() {
        // TODO Auto-generated method stub
        System.out.println("From Real Proxy");
    }

    public RealSubject(){
        
    }
}
//代理对象
public class ProxySubject extends Subject{
    private RealSubject realSubject; //用真实角色作为代理角色的属性
    
    public ProxySubject() {
        
    }
    
    @Override
    public void request() { //这个方法封装了真实对象的request方法
        preRequest();
        if (realSubject == null) {
            realSubject = new RealSubject();
        }
        realSubject.request();//此处执行真实对象的request方法
        postRequest();
    }

    private void postRequest() {
        // TODO Auto-generated method stub
        
    }
    private void preRequest() {
        // TODO Auto-generated method stub
        
    }

}

猜你喜欢

转载自www.cnblogs.com/yld77/p/9789622.html