代理模式的詳解(一)---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
        
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM