1. 程式人生 > >代理模式的詳解(一)---SpringAOP的兩種實現代理模式的詳細解讀

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